A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 战行者 于 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讲师
李老师
前端讲师
这样,教师职称可以在没有选课的时候也可以存在。

4 个回复

倒序浏览
优秀
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马