MySQL中的多对多关系

时间:2016-07-05 17:48:30

标签: mysql database-design

我有这种实体关系:

Diagram ER

我想保存有关当前团队和最后一支队伍的信息,同时我也会保存每个团队的不同职位。

我创建了这个表:

玩家表:

create table player(

   codPlayer varchar(12) primary key,
   name varchar(30) unique not null,
   codCurrentTeam varchar(12),
   position varchar(20),
   foreign key (codCurrentTeam) references team(codTeam) 
);

团队表:

create table team(

   codTeam varchar(12) primary key,
   name varchar(40) unique not null

);

lastTeam表:

create table lastTeam(

    startDate date,
    finishDate date,
    codTeam varchar(12),
    codPlayer varchar(12),
    constraint pkLastTeam primary key (codTeam,codPlayer),
    foreign key (codTeam) references team(codTeam),
    foreign Key (codPlayer) references jugador (codPlayer)
);

职位表:

create table position(

   codPlayer varchar(12),
   codLastTeam varchar(24),
   position varchar(20),
   primary key (codPlayer, codLastTeam),
   foreign key (codPlayer) references jugador(codPlayer),
   foreign key (codLastTeam) references lastTeam(pkLastTeam)

);

我可以创建除position之外的所有表,mysql返回下一个错误:

  

错误代码:1215。无法添加外键约束

也许我的图有一些错误,但我不知道如何实现设计

2 个答案:

答案 0 :(得分:0)

问题是你没有

在lastTeam t中创建表位置“pkLastTeam”列

codPlayer varchar(12),
   codLastTeam varchar(24),
   position varchar(20),
   primary key (codPlayer, codLastTeam),
   foreign key (codPlayer) references jugador(codPlayer),
   foreign key (codLastTeam) references lastTeam(pkLastTeam)

);

答案 1 :(得分:0)

我想我可以解决为 codTeam,codPlayer1 添加新的atributte codPlayer1 和更改 pkLastTeam 的问题。 表格看起来像这样:

create table position(

    codPlayer varchar(12),
    codTeam varchar(12),
    codPlayer1 varchar(12),
    position varchar(20),
    primary key (codPlayer, codTeam,codPlayer1),
    foreign key (codPlayer) references player(codPlayer),
    foreign key (codPlayer,codPlayer1) references lastTeam(codTeam,codPlayer)

);