我有以下三个样本表(用于提问的简化演示):
CREATE TABLE Teams
(
Id int IDENTITY(1,1) NOT NULL,
Name varchar(50) NOT NULL,
PRIMARY KEY (Id)
)
CREATE TABLE TeamGroups
(
Id int NOT NULL,
TeamId int NOT NULL,
PRIMARY KEY (Id,TeamId)
)
CREATE TABLE RoomBookings
(
Id int NOT NULL,
TeamGroupId int NOT NULL,
RoomId int NOT NULL,
PRIMARY KEY (Id)
)
我已经设置了以下外键:
ALTER TABLE TeamGroups WITH CHECK
ADD CONSTRAINT [FK_TeamGroups_Teams]
FOREIGN KEY (TeamId) REFERENCES Teams(Id)
我们的想法是每个Team
可以为零或更多TeamGroups
,每个TeamGroup
可以有零个或多个RoomBookings
为了反映这一点,我想将RoomBookings
表中的外键添加到TeamGroups
表中。
我尝试使用Management Studio中的Relationships GUI创建外键(主键表:TeamGroups.ID
,外键表:RoomBookings.TeamGroupId
)但是我收到错误:
表格中的列' TeamGroups'与现有主键不匹配 或UNIQUE约束
我假设它是因为TeamGroups
表有两列主键?
我真的不想从TeamGroups
表中创建外键约束(例如,密钥存在于TeamGroups
表中),因为该表最终将由其他表格(例如EquipmentBookings
,GroupManagers
等)。
任何帮助?
答案 0 :(得分:0)
如果您的主键由多个列组成,那么<strong>所有外包键也必须所有这些列 - 没有办法解决这个问题。
但我不明白为什么在尝试根据TeamGroups
列将Team
与Team.Id
关联起来时会出现此错误....很好。
尝试使用:
ALTER TABLE TeamGroups WITH CHECK
ADD CONSTRAINT [FK_TeamGroups_Teams]
FOREIGN KEY (TeamId) REFERENCES Teams(Id);
您有Teams
(根本不是TeamGroups
中的有效列),而您REFERENCES Teams.id
错误了 - 它必须是REFERNCES Teams(Id);
(列在括号中 - 而不是&#34;点&#34;符号)
更新从TeamGroups
到RoomBookings
- 是....要么使用TeamGroups
表中RoomBookings
的两列 - 或者什么会阻止你将TeamGroups.Id
列设为INT IDENTITY
然后将PK放在这一列?有什么好理由吗?
CREATE TABLE TeamGroups
(
TeamGroupId int NOT NULL,
TeamId int NOT NULL,
PRIMARY KEY (TeamGroupId)
)
ALTER TABLE dbo.RoomBookings
ADD CONSTRAINT FK_RoomBookings_TeamGroup
FOREIGN KEY TeamGroupId REFERENCES TeamGroups(TeamGroupId)