08-MySQL--关系(一对一+一对多+多对多)+范式(三范式+逆规范化)

本文详细介绍了MySQL中的三种关系类型:一对一、一对多和多对多,以及如何在数据库设计中处理这些关系。同时,文章阐述了数据库范式的基本概念,包括第一、第二和第三范式,强调了范式在减少数据冗余和优化存储空间方面的作用。最后,文章讨论了逆规范化,指出其在提升查询效率和增加数据冗余之间的权衡。

一、关系

1、将实体与实体的关系,反映到最终数据库表的设计上,将关系分成三种:一对一、一对多(多对一)和多对多

注:所有的关系都是指表与表之间的关系

2、一对一:一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然。一对一关系的设计方案是保证两张表中使用同样的主键即可

eg:将人员的常用信息(姓名、性别、年龄等)和不常用信息(婚姻、籍贯、家庭住址等)分离存储,提高查询效率。使用一个具有唯一性的字段来共同连接两张表,保证常用信息和不常用信息一一对应

3、一对多:通常也叫多对一。一张表中的一条记录可以对应另外一张表中的多条记录。但反过来,另外一张表的一条记录只能对应第一张表的一条记录。一对多关系的设计方案是在“多”关系的表中维护一个字段,这个字段是“一”关系表的主键(通常是在“多”表中维护“一”表对应的关系)

eg:在孩子表(多表)中增加一个字段指向妈妈表(一表)

4、多对多:表A中的一条记录能够对应表B中的多条记录,同时表B中的一条记录也能对应表A中的多条记录。多对多关系的设计方案是增加一个中间表,让中间表与对应的其他表形成两个多对一的关系,多对一的解决方案是在“多”表中增加“一”表对应的主键字段

问题:多对多的关系如果按照多对一的关系维护,就会出现一个字段中有多个其他表的主键,在访问的时候就会带来不便

解决方案:既然通过两张表自己增加字段解决不了问题,那么就通过第三张表来解决。设计一张中间表,维护两张表对应的联系,每一种联系都包含

eg:增加一张新表,专门维护老师表和学生表之间的(多对多)关系。老师表与中间表是一对多的关系,中间表是多表,维护了能够唯一找到一表的关系;同样的,学生表与中间表也是一对多的关系,中间表是多表,一对多的关系可以匹配到关联表之间的数据

(1)学生找老师:找出学生id --> 中间表寻找匹配记录(多条) --> 老师表匹配(一条)

(2)老师找学生:找出老师id --> 中间表寻找匹配记录(多条) --> 学生表匹配(一条)

二、范式

1、范式:Normal Format。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值