1NF(第一范式)、2NF(第二范式)和3NF(第三范式)是关系型数据库设计中的规范化概念,用于确保数据表的结构良好,减少数据冗余和提高数据的一致性。
1NF(第一范式):
1NF 要求关系中的每个属性具有原子性,即每个属性的值都是不可再分的。这意味着在关系中的每个单元格中,只能包含一个单一的值。
例子:
考虑以下学生表:
学生ID | 姓名 | 课程 |
---|---|---|
1 | 小明 | 数学, 物理 |
2 | 小红 | 语文, 英语 |
这个表不符合1NF,因为"课程"列包含了多个值。修正后的表应该如下:
学生ID | 姓名 | 课程 |
---|---|---|
1 | 小明 | 数学 |
1 | 小明 | 物理 |
2 | 小红 | 语文 |
2 | 小红 | 英语 |
2NF(第二范式):
2NF 要求关系中的非主属性完全依赖于关系的候选键。一个表达式完全依赖于候选键,是指没有任何一个属性能够被候选键的一部分所确定。
例子:
考虑以下订单表:
订单号 | 产品 | 产品描述 | 价格 |
---|---|---|---|
1 | 电脑 | 台式电脑 | 1000 |
2 | 手机 | 智能手机 | 500 |
这个表不符合2NF,因为"产品描述"和"价格"这两列对于"产品"而言只依赖于部分候选键(“产品”),而不是全部候选键(“订单号”,“产品”)。修正后的表应该如下:
产品 | 产品描述 | 价格 |
---|---|---|
电脑 | 台式电脑 | 1000 |
手机 | 智能手机 | 500 |
3NF(第三范式):
3NF 要求关系中的非主属性不传递依赖于关系的候选键。这意味着在关系中,任何非主属性都不依赖于其他非主属性。
例子:
考虑以下学生-教师表:
学生ID | 学生姓名 | 教师姓名 |
---|---|---|
1 | 小明 | 张老师 |
2 | 小红 | 王老师 |
这个表不符合3NF,因为"教师姓名"依赖于非主属性"学生姓名"。修正后的表应该如下:
学生ID | 学生姓名 |
---|---|
1 | 小明 |
2 | 小红 |
学生姓名 | 教师姓名 |
---|---|
小明 | 张老师 |
小红 | 王老师 |
这样,每个表都符合3NF。
如有不对,敬请批评指正!
(转载文章请注明作者和出处)