本帖最后由 战行者 于 2018-7-18 20:52 编辑
数据库设计的三范式
在开发中对于数据库的设计,只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库。 范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦,一般在项目中,用得最多的也就是三范式。 第一范式:每个字段的值都必须是原子性,不可分割的。 例:学生表 学生编号 | | | | | | | Email:zhangsan@163.com,Phone:13812345678 | | | | Email:lisi@163.com,Phone:13612345678 |
上表中的联系方式就不符合,可以再分割为电子邮箱和电话,更改(拆分成两字段)如下: 第二范式:每个字段和主键都有完全依赖关系 例:学生选课表: 上表中通过(学生,课程)可以确定教师、教师职称,教材,教室和上课时间,所以可以把(学生,课程)作为主键。但是,教材并不完全依赖于(学生,课程),只拿出课程就可以确定教材,因为一个课程,一定指定了某个教材。教材不完全依赖于主键,所以不满足第二范式,更改(拆分成两张表)如下: 选课表
课程表:
第二范式可以减少插入异常,删除异常和修改异常。
第三范式:每个字段都和主键有直接依赖关系,而非间接 上表选课表中教师职称依赖于教师,教师依赖于主键(学生,课程),也就是教师职称间接依赖主键,就不符合第三范式。修改如下: 选课表: 教师表: 这样,教师职称可以在没有选课的时候也可以存在。
|