这是我的第一张表:旅游
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列定义候选键? 我经常搜索但找不到任何确切的方法。
感谢您的帮助。
答案 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