SQL Server Management Studio 不允许我为多个主键创建多个外键

SQL Server Management Studio does NOT let me create multiple foreign keys to multiple primary keys

我有一个 table ApplicationRegionTranslation 的一对多关系。

我想将 FK 从 Translation.appname/isocode 设置为 ApplicationRegion.appname/isocode

但是正如您从屏幕截图中看到的那样,这并没有奏效。

当 FK 配置 window 打开时,left/right 侧显示 3 列

appname
isocode
resourcekey

然后我选择作为父 table ApplicationRegion 并从 FK 设置中删除资源键列。

然后单击“确定”,但我收到了您在屏幕截图中看到的错误。

我终于让它与那个解决方法一起工作,我想知道为什么我必须使用这个解决方法?

  1. 从 Translation.ResourceKey 列删除 PK
  2. 打开FK配置window
  3. 现在只有 2 列显示为外键
  4. 我点击确定
  5. 现在我再次将 PK 添加到 Translation.ResouceKey 列
  6. 我向所有 3 个 table 添加了测试数据,一切正常。

为什么采用此解决方法?

更新

哈哈...

我认为您一定在 SSMS 中遇到了一个奇怪的故障。我能够使用 SSMS 2014 创建您的架构,没有任何错误。添加新外键时,它确实预填充了三个复合主键列。在我开始在 FK 中添加两列之前,我很小心地确保它们都被清空了。也许 SSMS 认为其中一个空白行中仍有数据。

编辑:再想一想,SSMS 以缓存编辑 table 时所做的任何更改而闻名。例如,如果您要修改两个 table 并打开两个编辑 windows。然后你在一个 window 中更改 PK,然后尝试在第二个 window 中引用它,它会出错,因为它缓存了第一个 table 的模式,当 window 首次打开。

这是我生成的 DDL:

CREATE TABLE [dbo].[AppRegion](
    [appname] [nvarchar](50) NOT NULL,
    [isocode] [char](5) NOT NULL,
 CONSTRAINT [PK_AppRegion] PRIMARY KEY CLUSTERED 
(
    [appname] ASC,
    [isocode] ASC
)
) ON [PRIMARY]

CREATE TABLE [dbo].[Translation](
    [ResourceKey] [nvarchar](128) NOT NULL,
    [appname] [nvarchar](50) NOT NULL,
    [isocode] [char](5) NOT NULL,
    [text] [nvarchar](400) NULL,
 CONSTRAINT [PK_Translation] PRIMARY KEY CLUSTERED 
(
    [ResourceKey] ASC,
    [appname] ASC,
    [isocode] ASC
)
) ON [PRIMARY]

ALTER TABLE [dbo].[Translation]   ADD  CONSTRAINT [FK_Translation_AppRegion] FOREIGN KEY([appname], [isocode])
REFERENCES [dbo].[AppRegion] ([appname], [isocode])