请举例说明3nf和BCNF
时间: 2024-04-07 17:30:22 浏览: 65
数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析
5星 · 资源好评率100%
当一个关系表满足3NF(第三范式),意味着它已经消除了非主属性对于候选键的传递依赖关系。下面是一个例子:
假设我们有一个关系表 "学生课程成绩",包含学生的学号(主键)、课程号(主键)、学生姓名、课程名称和成绩。
| 学号 | 课程号 | 学生姓名 | 课程名称 | 成绩 |
|------|--------|----------|----------|------|
| 1 | 1001 | 张三 | 数学 | 90 |
| 2 | 1002 | 李四 | 英语 | 80 |
| 3 | 1001 | 王五 | 数学 | 85 |
在这个例子中,我们可以观察到存在非主属性 "课程名称" 对于候选键 "课程号" 的传递依赖。也就是说,通过课程号可以传递依赖到课程名称。为了满足3NF,我们需要将这个关系表进行分解。
我们可以分解成两个表:
学生表(学号、学生姓名):
| 学号 | 学生姓名 |
|------|----------|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
课程表(课程号、课程名称):
| 课程号 | 课程名称 |
|--------|----------|
| 1001 | 数学 |
| 1002 | 英语 |
成绩表(学号、课程号、成绩):
| 学号 | 课程号 | 成绩 |
|------|--------|------|
| 1 | 1001 | 90 |
| 2 | 1002 | 80 |
| 3 | 1001 | 85 |
现在,我们可以通过主键(学号和课程号)将学生表、课程表和成绩表关联起来,消除了传递依赖,同时满足了3NF。
如果我们进一步要求满足BCNF(Boyce-Codd范式),我们需要检查是否存在非主属性对于候选键的完全依赖关系。在上述例子中,课程表的非主属性(课程名称)完全依赖于候选键(课程号),因此也满足BCNF。
通过使用3NF和BCNF范式,可以提高数据库的规范性和结构化程度,减少数据冗余和更新异常的发生。
阅读全文