此篇为学习笔记
1.设计分析
2.拆分表
实体属性与表字段一一对应。
一个订单中可能有很多重复的属性:书名 定价、会员价、数量、小计
数据库第一范式:
一个表中不能包含重复的数据列
所以可以拆表为订单表(ORDER)与订单条目表(ORDERITEM)
但是又想到还有如下问题:
- 如果一千个用户买了web书,那么在orderItem表中web书会存在一千遍,会有大量的冗余数据
- 订单号和订单项序列组成订单条目表的联合主键,会员价、数量、小计是完全依赖于主键的,书名和定价并不完全依赖于此主键
数据库第二范式:
所有的非主键字段需要完全依赖于主键字段
故可以继续拆分出一个图书表:
现在问题又来了,小计这个字段不仅仅依赖主键,还依赖于会员价和数量,而会员价和数量则依赖于主键。也就是形成了传递依赖。
数据库第三范式:
非主键字段不能依赖于其他非主键字段,即非主键字段之间不能存在传递依赖
故去掉字段:小计。设计完成
-
一对一关系:
主键关联、唯一外键关联 -
一对多关系:
外键关联 -
多对多关系:
借助中间表实现
1.主键是能确定一条记录的唯一标识。比如,一条身份信息表中的身份证号。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。