合理的数据库:
1.结构合理
2.冗余较小
3.尽量避免避免插入、删除、修改异常
范式(NF:Normal Form)
要设计一个结构合理的数据库,必须满足一定的范式
第一范式,第二范式,第三范式 (依次嵌套包含 范式越高 设计质量越高)
第一范式:数据表中每一列都是不可分割的基本数据项(即同一列不能有多个值 原子性)
如:用户表(用户名 家庭地址)
用户表(用户名 省 城市 详细地址) 实际业务需求:如按省 或 市查询
应用:第一范式的合理遵循需要根据实际业务需求来定
第二范式:数据表中的每一列都和主键(联合主键)相关,而不能只与主键的某一部分相关(解决多对多)
(即数据表中只能存一种数据,不可以把多种数据存在同一张数据表中)
(学生--课程 多对多)
学号,课程编号作为联合主键, 课程名称只依赖于课程编号,但是与学号没有关系。
冗余较多 如课程名称 修改不方便 如 修改张三的名字 所以上表不合理!
解决方案如下:
第三范式:数据表中的数据都和主键直接相关,而不能间接相关(解决一对多)
范式的优缺点
数据库表之间的关系: 一对一:学生和学生证
一对多:学生和班级
多对多:学生和课程
如何表示数据库表之间关系:
一对一:外键+唯一
一对多:外键
多对多:引入中间表,1个多对多 --> 2个一对多(参考第二范式)