我有一个包含调查列表的表格(PK 是 ID)
CREATE TABLE [dbo].[SurveyMaster](
[ID] [nvarchar](4) NOT NULL,
[Title] [nvarchar](200) NULL,
[IsActive] [bit] NOT NULL,
还有一个包含变量映射列表的表格。
CREATE TABLE [dbo].[VariableMappings](
[ParentSurvey_ID] [nvarchar](4) NOT NULL,
[ReportingMonth] [nvarchar](6) NOT NULL,
[VariableName] [nvarchar](400) NOT NULL,
[Value] [int] NOT NULL
我希望在 ParentSurvey_ID、ReportingMonth 和 Variable Name 上为 VariableMappings 创建一个主键,以确保唯一的记录。
与此同时,我希望在 VariableMappings.ParentSurvey_ID 和 SurveyMaster.ID 之间建立外键关系,以确保 VariableMappings 仅包含相关的 SurveyID。
我在 SQL Server 中尝试了几种方法,但我不相信我可以创建 FK,因为复合键由 3 列组成。
我怎样才能实现这一目标?
最佳答案
是的,你可以:
CREATE TABLE [dbo].[VariableMappings](
[ParentSurvey_ID] [nvarchar](4) NOT NULL,
[ReportingMonth] [nvarchar](6) NOT NULL,
[VariableName] [nvarchar](400) NOT NULL,
[Value] [int] NOT NULL,
PRIMARY KEY (ParentSurvey_ID, ReportingMonth, VariableName),
FOREIGN KEY (ParentSurvey_ID)
REFERENCES dbo.SurveyMaster (ID)
) ;
大部分与您的问题无关,但是拥有如此宽的 PRIMARY KEY
(410 nvarchars) 并不是最好的主意。
关于sql - 复合主键+外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215494/