我迷失了对具有传递依赖关系的关联建模。这是相应的ERM:
比赛有一个主队和一个客队(为了简单起见,让我们坚持主队)。因此,我会在比赛中包含一个team_id属性。
现在,我怎样才能确保比赛中维持的球队参加比赛的联赛?我愿意介绍联赛表,但不知道如何保留有关的信息传递依赖“团队 - > 参与 - >匹配 - > 参与 - >联盟 - > 参与 - >团队“
答案 0 :(得分:1)
我假设两个球队必须参加比赛的联赛。解决方案涉及重叠约束和重叠外键引用。
你在球队和联赛之间显示m:n关系。匹配将参考此表。
create table team_leagues (
team_id ...,
league_id ...,
other_columns ...,
primary key (team_id, league_id),
foreign key (team_id) references teams (team_id),
foreign key (league_id) references leagues (league_id)
);
联盟和比赛之间存在1:n的关系。这里存在重叠约束。
create table matches (
home_team_id ...,
guest_team_id ...,
match_start_time ...,
league_id ...,
primary key (home_team_id, match_start_time),
unique (guest_team_id, match_start_time),
foreign key (home_team_id, league_id)
references team_leagues (team_id, league_id),
foreign key (guest_team_id, league_id)
references team_leagues (team_id, league_id)
);
matches.league_id是否还需要对联盟的外键引用取决于应用程序。我认为它应该足以引用team_leagues。