Mysql表中同一个字段能否同时外键关联另外多个表的不同列

转载

表中同一列能否外键关联其它多表

虽数据库允许,比如下面这个例子,但违背第三范式,给现实意义也造成一定困扰,在数据库执行操作上也带来麻烦。

create table a(aid int, val varchar(10), primary key(aid));

create table b(bid int, val varchar(10), primary key(bid));

create table c(cid varchar(10), abid int not null);

alter table c add constraint `fk_aid` foreign key (`abid`) references `a` (`aid`);

alter table c add constraint `fk_bid` foreign key (`abid`) references `b` (`bid`);

insert into a values(1,'aa');

insert into b values(2,'bb');


insert into c (cid,abid) values(234,1);

--INSERT 语句与 FOREIGN KEY 约束"fk_bid"冲突。表"dbo.b", column 'bid'。

insert into c (cid,abid)values(235,2);

--INSERT 语句与 FOREIGN KEY 约束"fk_aid"冲突。表"dbo.a", column 'aid'。

------------------------------------------------------

insert into a values(2,'aacc');

insert into b values(1,'bbdd');

insert into c (cid,abid) values(236,1);

insert into c (cid,abid) values(237,2);

--a表的aid列跟b表的bid列同时含有1和2,则在c插入执行成功

drop table c , a , b

推荐阅读更多精彩内容