集群主键和关系

时间:2016-11-10 15:46:09

标签: sql-server foreign-keys primary-key

我正在使用我的数据库中的主键:

Example 1

如您所见,我使用的是聚簇索引。当我尝试插入类似的东西时: Example 2

我发现主键是重复的异常,这不是我的预期。 idQuestionaire和version的组合需要是唯一的,这样我的插入脚本才能工作。

我尝试了以下内容: 在" Keys" servey的文件夹有4个键(主键,来自parkinglottype的外键,调查$ idQuestionnaire_UNIQUE和调查$ version_UNIQUE)

删除UNIQUE键后,插入脚本工作正常但我的调查问题的外键不再起作用了......

这是"调查$ idQuestionnaire_UNIQUE"的代码:

    ALTER TABLE [dbo].[survey] ADD  CONSTRAINT [survey$idQuestionnaire_UNIQUE] UNIQUE NONCLUSTERED 
(
    [idQuestionnaire] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

这是我的主键:

ALTER TABLE [dbo].[survey] ADD  CONSTRAINT [PK_survey_idQuestionnaire] PRIMARY KEY CLUSTERED 
(
    [idQuestionnaire] ASC,
    [version] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

如何使用2列使群集主键唯一,并且仍然可以将其用作外键?

1 个答案:

答案 0 :(得分:0)

如果“调查”的主键是两个列“idQuestionnaire”和“version”,则向“idQuestionnaire”添加唯一索引是错误的。单独的那列唯一,从主键约束和INSERT语句中可以明显看出这一点。

SQL Server在主键上构建索引。通常不需要主键列上的其他索引。

您的外键约束需要引用列的,如...(Survey_idQuestionnaire, Survey_version) references [dbo].[survey] (idQuestionnaire, version)