黑马程序员技术交流社区

标题: 【上海校区】数据库设计的三范式 [打印本页]

作者: 战行者    时间: 2018-7-18 20:28
标题: 【上海校区】数据库设计的三范式
本帖最后由 战行者 于 2018-7-18 20:52 编辑

数据库设计的三范式

        在开发中对于数据库的设计,只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库
        范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦,一般在项目中,用得最多的也就是三范式
第一范式:每个字段的值都必须是原子性,不可分割的。
例:学生表
学生编号
姓名
性别
联系方式
1
张三
Email:zhangsan@163.com,Phone:13812345678
2
李四
Email:lisi@163.com,Phone:13612345678
上表中的联系方式就不符合,可以再分割为电子邮箱和电话,更改(拆分成两字段)如下:
学生编号
姓名
性别
电子邮箱
电话
1
张三
zhangsan@163.com
13812345678
2
李四
lisi@163.com
13612345678
第二范式:每个字段和主键都有完全依赖关系
例:学生选课表:
学生
课程
教师
教师职称
教材
教室
上课时间
李四
PHP
刘老师
PHP讲师
PHP高级程序设计
301
08:00
张三
前端
李老师
前端讲师
JavaScript高级程序设计
302
13:30
上表中通过(学生,课程)可以确定教师、教师职称,教材,教室和上课时间,所以可以把(学生,课程)作为主键。但是,教材并不完全依赖于(学生,课程),只拿出课程就可以确定教材,因为一个课程,一定指定了某个教材。教材不完全依赖于主键,所以不满足第二范式,更改(拆分成两张表)如下:
选课表
学生
课程
教师
教师职称
教室
上课时间
李四
PHP
刘老师
PHP讲师
301
08:00
张三
前端
李老师
前端讲师
302
13:30

课程表:
课程
教材
PHP
PHP高级程序设计
前端
JavaScript高级程序设计

第二范式可以减少插入异常,删除异常和修改异常。
第三范式:每个字段都和主键有直接依赖关系,而非间接
上表选课表中教师职称依赖于教师,教师依赖于主键(学生,课程),也就是教师职称间接依赖主键,就不符合第三范式。修改如下:
选课表:
学生
课程
教师
教室
上课时间
李四
PHP
刘老师
301
08:00
张三
前端
李老师
302
13:30
教师表:
教师
教师职称
刘老师
PHP讲师
李老师
前端讲师
这样,教师职称可以在没有选课的时候也可以存在。


作者: 不二晨    时间: 2018-7-19 13:36
优秀
作者: wuqiong    时间: 2018-7-19 14:18

作者: 摩西摩西OvO    时间: 2018-7-19 14:23

作者: 吴琼老师    时间: 2018-7-19 16:55





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2