2016-07-05 85 views
0

我有这样的实体关系:多对多relatioship

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) 

); 

我可以创建不同的位置中的所有表中,MySQL会返回一个错误:

Error Code: 1215. Cannot add foreign key constraint

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

回答

0

问题是你没有在lastTeam牛逼

创建表的位置“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) 

); 
+0

你必须定义odLastTeam VARCHAR(24),但你没有在任何其他表slimier长度列与之相匹配的为外键 –

+0

我没有一个名为列“pkLastTeam “因为这是表格主键约束的名称,由lastTeam由两列codTeam和codPlayer组成,因为这是玩家和团队之间的表格 –

+0

codeLastTeam是单列,因为我知道你不能在这种类型的外键中定义外键一种其他表组合主键的方法 –

0

我想我能解决增加新的atributte codPlayer1和改变pkLastTeamcodTeam,codPlayer1这个问题。 表是这样的:

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) 

);