复合主键+外键

Tom*_*Tom 2 sql database sql-server-2008

我有一个包含调查列表的表(PK是ID)

CREATE TABLE [dbo].[SurveyMaster](
    [ID] [nvarchar](4) NOT NULL,
    [Title] [nvarchar](200) NULL,
    [IsActive] [bit] NOT NULL,
Run Code Online (Sandbox Code Playgroud)

还有一个包含Variable Mappings列表的表.

CREATE TABLE [dbo].[VariableMappings](
    [ParentSurvey_ID] [nvarchar](4) NOT NULL,
    [ReportingMonth] [nvarchar](6) NOT NULL,
    [VariableName] [nvarchar](400) NOT NULL,
    [Value] [int] NOT NULL
Run Code Online (Sandbox Code Playgroud)

我希望在ParentSurvey_ID,ReportingMonth和Variable Name上为VariableMappings创建一个主键,以确保唯一的记录.

但与此同时,我希望VariableMappings.ParentSurvey_ID和SurveyMaster.ID之间存在外键关系,以确保VariableMappings仅包含相关的SurveyID.

我在SQL Server中尝试了几种方法但我不相信我可以创建FK,因为复合键由3列组成.

我怎样才能实现这一目标?

ype*_*eᵀᴹ 9

是的你可以:

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)
) ;
Run Code Online (Sandbox Code Playgroud)

大多数与你的问题无关,但有一个PRIMARY KEY如此广泛(410 nvarchars)并不是最好的主意.

  • 非常感谢.我认为我遇到的问题是通过SQL Server Management Studio使用GUI.我显然需要学习如何更好地做到这一点,谢谢. (2认同)