错误不包含与引用列匹配的主键或候选键

时间:2016-04-09 09:01:04

标签: sql sql-server database-design

这是我的第一张表:旅游

CREATE TABLE [dbo].[Tours] (

[Id]              INT            IDENTITY (1, 1) NOT NULL,
[TourId]          INT            NOT NULL,
[TCountry]        NVARCHAR (50)  NULL,
[TName]           NVARCHAR (100) NULL,


CONSTRAINT [PK_Tours] PRIMARY KEY CLUSTERED ([TourId]),
CONSTRAINT [FK_Tours_ToTourDates] FOREIGN KEY ([TourId]) REFERENCES [TourDates]([TourId]));

这是下一个,表:TourDates

CREATE TABLE [dbo].[TourDates] (

[Id]            INT            IDENTITY (1, 1) NOT NULL,
[TourId]        INT            NOT NULL,
[TourStartDate] DATETIME       NULL,


CONSTRAINT [PK_TourDates] PRIMARY KEY CLUSTERED ([Id] ASC));
第一个表的

我有这个错误:

  

SQL71516 ::引用的表'[dbo]。[TourDates]'包含no   与引用列列表匹配的主键或候选键   外键。如果引用的列是计算列,则为   应该坚持下去。

如何在TourDates表中为TourId列定义候选键? 我经常搜索但找不到任何确切的方法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我相信你应该做的事情比现在做的还要多。 如果我理解正确的话,Tours表似乎会保持每个巡视与TourDates的1:N关系。

因此,您的FOREIGN KEY约束实际上应该在TourDates而不是Tours表上声明。

至于你的问题(我认为如果你把这些关系转换成我理解的那些关系就不会这样),在这种情况下你通常需要在该列上创建一个唯一的索引。

您不能通过外键约束引用可能包含几个完全相同的值的列,因此需要某种唯一键。

评论后修改:

ALTER TABLE [dbo].[TourDates]
   ADD CONSTRAINT FK_Tour_TourDates
   FOREIGN KEY ([TourId]) REFERENCES [dbo].[Tours]([TourId]) ON DELETE CASCADE