数据库各范式的一个例子
本文最后更新于:2025年2月17日星期一晚上10点07分
1NF
s表示学生student的缩写,c表示课程course的缩写
斜体表示主属性(在某个候选键中)
| s_id | s_name | s_dept | c_id | c_name | c_grade | c_grade_level |
|---|---|---|---|---|---|---|
| 001 | 小苏 | 数学系 | 101 | 数学分析 | 100 | A+ |
| … |
2NF
由于非主属性s_dept依赖于s_name或者s_id,属于部分依赖码,不满足2NF,故应拆分出s_dept
| s_id | s_name | c_id | c_name | c_grade | c_grade_level |
|---|---|---|---|---|---|
| 001 | 小苏 | 101 | 数学分析 | 100 | A+ |
| … |
3NF
由于c_grade_level依赖于c_grade,而c_grade又依赖于主键,所以存在非主属性传递依赖于码,不满足3NF,应拆分出c_grade或c_grade_level
| s_id | s_name | c_id | c_name | c_grade |
|---|---|---|---|---|
| 001 | 小苏 | 101 | 数学分析 | 100 |
| … |
BCNF
由于存在依赖:c_id→c_name,s_id→s_name等,而c_id和s_id都无法包含某个码(因为需要student和course才能确定一行,单独学生或者单独课程都没法确定),所以不满足BCNF,需要进行拆分
| s_id | c_id | c_grade |
|---|---|---|
| 001 | 101 | 100 |
| … |
数据库各范式的一个例子
https://asyu.in/2025/02/17/database-Normal-Form/