1.前言
对于多表对多表的关系,我们至少需要三张数据表。
可以把表A称之为主表,表B称之为关系表,表C称之为字典表或者副表(字典表是纪录比较少,而且基本稳定的,例如:版块名称;副表是内容比较多,内容变化的,例如)。
按照数据库的增删查改操作,多对多关系的查找都可以用inner join或者
select * from 主表 where id in (select 主表id from 关系表)
2.多对多
case:
----订单表(略)
----商品表
create table product(
id int primary key auto_increment,
name varchar (20),
price double
);
----订单表和商品表的对应关系如图示:
观察上图,订单表和商品表字段之间的多对多关系映射。止于此,在开发中我们一般会引入一张中间表,在中间表中存放两张表的主键,一般还会将这两个表的主键设置成中间表的联合主键,将多对多拆分成两个一对多。
----中间表
create table orderitem(
oid int,
pid int
);
三张表之间的关系如图示:
为了保证数据的有效性和完整性,在中间表上添加两份外键约束即可(不是必须的,可以通过Java程序来控制)。
添加外键约束:
alter table orderitem add foreign key (oid) references orders(id);
alter table orderitem add foreign key (pid) references product(id);
主表--中间表--从表的对象模型:
外键约束的特点:
1.主表中不能删除从表中已引用的数据;
2.从表中不能添加主表中不存在的数据。
3.小结
在开发中处理多表对多表:
引入一张中间表,用来存放两张表的主键,一般会将这两个字段设置为联合主键,就可以将多对多的关系
拆分成两个一对多。为了保证数据的有效性和完整性,需要在中间表上添加两个外键约束即可。
人的一生中,最光辉的一天并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志那天。愿你就像早晨八九点钟的太阳,活力十足,永远年轻。