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

);

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

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

----中间表

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.小结

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

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

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


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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洒家肉山大魔王

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值