SQL 两列主键上的服务器外部关系

SQL Server foreign relationship on two-column primary key

我有以下三个示例 tables(用于问题目的的简化演示):

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 table 中的外键添加到 TeamGroups table 中。

我尝试使用 Management Studio 中的关系 GUI 创建外键(主键 table:TeamGroups.ID,外键 table:RoomBookings.TeamGroupId)但是我得到一个错误:

The columns in table 'TeamGroups' do not match an existing primary key or UNIQUE constraint

我假设这是因为 TeamGroups table 有一个两列主键?

我真的不想从 TeamGroups table 中创建外键约束(例如,键存在于 TeamGroups table 中),因为 table 最终会被其他 table 使用(例如 EquipmentBookingsGroupManagers 等)。

有什么帮助吗?

如果您的主键由多列组成,那么 所有 外键也 必须具有 所有这些列 - 有没有办法解决这个问题。

但我不明白为什么您会在尝试根据 Team.Id 列从 link TeamGroupsTeam 时收到此错误...应该可以正常工作。

试试这个:

ALTER TABLE TeamGroups WITH CHECK 
   ADD CONSTRAINT [FK_TeamGroups_Teams] 
   FOREIGN KEY (TeamId) REFERENCES Teams(Id);

你有 Teams(这根本不是 TeamGroups 中的有效列),你有 REFERENCES Teams.id 这是错误的 - 它需要是 REFERNCES Teams(Id); (括号中的列 - 不是 "dot" 符号)

更新:TeamGroupsRoomBookings - 是的....要么在 [=20] 中使用 TeamGroups 中的两列=] table - 或者什么会阻止您将 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)