MySQL(11)-----多表创建及描述表关系(多对多的分析和实现)

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

);

----订单表和商品表的对应关系如图示:

MySQL(11)-----多表创建及描述表关系(多对多的分析和实现)_第1张图片

观察上图,订单表和商品表字段之间的多对多关系映射。止于此,在开发中我们一般会引入一张中间表,在中间表中存放两张表的主键,一般还会将这两个表的主键设置成中间表的联合主键,将多对多拆分成两个一对多。

----中间表

create table orderitem(

      oid int,

      pid int

);

三张表之间的关系如图示:

MySQL(11)-----多表创建及描述表关系(多对多的分析和实现)_第2张图片

为了保证数据的有效性和完整性,在中间表上添加两份外键约束即可(不是必须的,可以通过Java程序来控制)。

添加外键约束:

alter table orderitem add foreign key (oid) references orders(id);

alter table orderitem add foreign key (pid) references product(id);

主表--中间表--从表的对象模型:

MySQL(11)-----多表创建及描述表关系(多对多的分析和实现)_第3张图片

外键约束的特点:

1.主表中不能删除从表中已引用的数据;

2.从表中不能添加主表中不存在的数据。

3.小结

在开发中处理多表对多表:

引入一张中间表,用来存放两张表的主键,一般会将这两个字段设置为联合主键,就可以将多对多的关系

拆分成两个一对多。为了保证数据的有效性和完整性,需要在中间表上添加两个外键约束即可。


人的一生中,最光辉的一天并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志那天。愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

你可能感兴趣的:(MySQL)