sql - 复合主键+外键

标签 sql database sql-server-2008

我有一个包含调查列表的表格(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/

相关文章:

sql-server - Microsoft SQL Server 从选择查询插入

sql-server-2008 - 无法安装 SQL Server 2008 R2 管理工具(完整)

MySQL IF/Else 语句结果作为列

php - MySqli : num_rows of grouped by hour()

php - 没有显示数据 MySql php

swift - 将数据从 firebase 获取到结构

android - 如何从 SQLite 中获取不同的值

sql - 消除具有相反值的行

database - 如何标记表格的选定列以供显示

sql - 数据库缓存