2016-11-10 136 views
0

我和我的数据库中的主键struggeling:聚集主键和关系

Example 1

正如你可以看到我使用聚簇索引。当我尝试插入类似的东西: Example 2

我得到的例外是主键是重复的,这不是我所期望的。 idQuestionaire和版本的组合需要是唯一的,这样我的插入脚本才能工作。

我试过如下: 在述略的“钥匙”文件夹下有4个按键(初级,从parkinglottype外键,调查$ idQuestionnaire_UNIQUE和调查$ version_UNIQUE)

除去UNIQUE键后插入脚本工作正常,但我的外键surveyquestion不工作了......

这是“调查$ 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列,仍然能够使用它作为外键?

回答

0

如果“survey”的主键是两个列“idQuestionnaire”和“version”,那么向“idQuestionnaire”添加唯一索引是一个错误。仅列该列是而不是唯一的,从主键约束和INSERT语句中都很明显。

SQL Server在主键上构建索引。主键列上的附加索引通常不是必需的。

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