数据库设计三范式

编程 · 05-17 · 254 人浏览

三范式

第一范式:任何一张表都应该有主键,每个字段是原子性的不能再分。

第二范式:建立在第一范式基础上,另外要求所有非主键字段完全依赖主键,不能产生部分依赖

学生编号(PK)教师编号(PK)学生姓名教师姓名
10011张三王老师
10022李四赵老师
10031王五王老师
10012张三赵老师

上表虽然符合第一范式,但违背第二范式,学生姓名、老师姓名都产生了部分依赖,导致数据冗余。

第三范式:建立在第二范式基础上,非主键字段不能传递依赖于主键字段。

学生编号(PK)学生姓名班级编号班级姓名
1001张三1一年一班
1002李四2一年二班
1003王五3一年三班
1004赵六3一年三班

上表因为产生了传递依赖,导致班级名称冗余。

表设计

一对多(学校 - 学生):一对多两张表,多的表加外键。

多对多(学生 - 课程):多对多三张表,关系表加外键。

一对一第一种方案:主键共享。

hid(主键)hname
1张三
2李四
3王五
wid(主键+外键)wname
1小花
2小兰
3小红

一对一第二种方案:外键唯一。

hid(主键)hname
1张三
2李四
3王五
wid(主键)wnamehid(外键+unique)
1小花1
2小兰2
3小红3

最终设计以满足客户需求为原则,有的时候会拿空间换速度。

MySQL
Theme Jasmine by Kent Liao