转载
虽数据库允许,比如下面这个例子,但违背第三范式,给现实意义也造成一定困扰,在数据库执行操作上也带来麻烦。
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
网友评论