我想把这张桌子带入2NF设计:
学生证 | 老师-不 | 老师 | 学生技能 |
---|---|---|---|
S1 | 1 | 奥特 | Python |
S1 | 2 | 比格勒 | Python |
S1 | 1 | 奥特 | SQL |
S1 | 2 | 比格勒 | SQL |
S2 | 1 | 汉森 | Python |
S2 | 2 | 穆勒 | Python |
S3 | 1 | 史密斯 | HTML |
S3 | 1 | 史密斯 | Java |
学生 ID 唯一标识学生。
老师是老师的名字,取决于学生 ID 和老师编号的组合。
StudentSkill 是学生拥有的技能,与老师完全无关。
表格上写着:
学生 S1 有两位老师(Ott、Biegler)和两项不相关的技能(Python、SQL)。
学生 S2 有两位老师(Hansen、Muller)和一项不相关的技能(Python)。
学生 S3 有一名老师(Smith)和两项不相关的技能(HTML、Java)。
主键是(学生 ID、教师编号、学生技能)的组合。
存在部分依赖性。教师仅依赖于学生 ID 和教师编号。因此,我为教师姓名创建了一个新表:
学生证 | 老师-不 | 老师 |
---|---|---|
S1 | 1 | 奥特 |
S1 | 2 | 比格勒 |
S2 | 1 | 汉森 |
S2 | 2 | 穆勒 |
S3 | 1 | 史密斯 |
并且原始表丢失了教师列:
学生证 | 老师-不 | 学生技能 |
---|---|---|
S1 | 1 | Python |
S1 | 2 | Python |
S1 | 1 | SQL |
S1 | 2 | SQL |
S2 | 1 | Python |
S2 | 2 | Python |
S3 | 1 | HTML |
S3 | 1 | Java |
(学生 ID、教师编号、学生技能)表中的教师编号列怎么样?
它没有做任何有用的事情(因为技能与教师无关),但它是主键的一部分,所以我在创建 2NF 期间无法触及它。
表在 2NF 标准化过程中会丢失主要属性吗?
对于2NF
因此,在这种情况下,删除第二个表中的教师编号列是正确的,因为技能仅取决于学生 ID。