数据库范式

数据库范式
1NF:属性单一,不可再分(仅一个值仅一种值)
很显然,在当前的任何RDBMS中,傻瓜也不可能做出不符合第一范式的数据库,因为RDBMS不允许你把数据库表的一列再分成二列或多列。实际上,还真有这样的垃圾设计,我在某个项目中遇到,将 first_name,middle_name,last_name放在一个字段的,最后想分都分不开,完全折服。


2NF:消除了部分依赖(部分依赖由复合主键导致,显然所有单主键的表都符合2NF)
<反例> 一个表
(学号, 课程名称)→(姓名, 年龄, 成绩, 学分)
<部分依赖>
(课程名称)→(学分)
(学号)→(姓名, 年龄)
<改正> 改为三个表
(学号)→(姓名, 年龄)
(课程名称)→(学分)
(学号,课程名称)→(成绩)


3NF:消除了传递依赖
<反例>
(学号)→(姓名, 年龄, 学院, 学院地点, 学院电话)
<传递依赖>
(学号)→(学院)→(学院地点, 学院电话)
<改正> 改为两个表
(学号)→(姓名,年龄,学院)
(学院)→(地点,电话)

你可能感兴趣的:(数据库范式)