我试图理解数据库规范化,但被示例所困扰。
假设一张桌子(老师,学科),老师只能读一个学科。
teacher subject
-----------------
A Math
B Computer science
C Math
教师字段是主键,FD教师->对象存在,该表似乎是3d范式。
但是如果我们将id列添加为行的新主键(而不是Teacher),>
id teacher subject -------------------- 1 A Math 2 B Computer science 3 C Math
然后该表的3 NF状态对我来说变得不明显。
据我所知3 NF的定义,不应存在由另一个非素数属性确定非素数属性的情况。但是在这里,我们在非主要属性的教师和科目之间有FD。我了解该表格仍处于3 NF中,但我不知道为什么。
我的假设是,当每个非素数属性都是由主键确定的非传递性时,我对3NF的定义是错误的,表为3 NF。 因此,在我的情况下,老师和主体都由id决定,这就是为什么非主要属性教师->主体存在之间的FD没有区别的原因。
您能否解释一下为什么添加id列不会导致3NF中断。
更新。在发表哲学评论后,我意识到定义和术语一团糟。
假设3NF的Wiki定义是正确的
第三范式(3NF)是:
- 该实体为第二范式。
- 没有非主要(非密钥)属性可传递地依赖于任何密钥,即,没有任何非主要属性均不依赖于其他非主要属性。所有非素数属性必须仅取决于候选键。
由于id->科目不是FD教师中的传递FD的结论->主题教师属性是候选关键字。因此,我们对任何键都没有非质数(非键)属性的传递依赖,并且该表位于3NF中。
我试图理解数据库规范化,但被示例所困扰。假设有一张桌子(老师,学科),老师只能读一个学科。教师科目----------------- A ...
让我对philipxy