如何建立具有传递依赖关系的关联?

时间:2014-05-11 18:16:37

标签: mysql sql entity-relationship

我迷失了对具有传递依赖关系的关联建模。这是相应的ERM:

ERM

比赛有一个主队和一个客队(为了简单起见,让我们坚持主队)。因此,我会在比赛中包含一个team_id属性。

现在,我怎样才能确保比赛中维持的球队参加比赛的联赛?我愿意介绍联赛表,但不知道如何保留有关的信息传递依赖“团队 - > 参与 - >匹配 - > 参与 - >联盟 - > 参与 - >团队“

1 个答案:

答案 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。