2

我有一个关于规范化(3NF)的简单问题。如果我有一个被定义为一个表...3NF中的循环依赖关系

客户(用户名,名字,姓氏,年龄,性别,种族)

而且用户名决定名字,姓氏,年龄,性别,种族

但是...为了论证起见,我们还可以假设名字,姓氏可以用来唯一标识一个行的表,所以名字,姓氏决定用户名,年龄,性别,种族

是3NF中的表,因为可以使用某些非主要属性(firstName,lastName)来确定表中的其他属性,但PK(用户名)可以确定随后用于确定其他属性的非主要属性属性。

我明白,这不是在BCNF,因为这个循环依赖问题,但我希望它至少在3NF。

在此先感谢您的帮助。

+1

*“一些非主要属性(firstName,lastName)”*这些是主要属性。 –

+0

如果它们不是密钥的一部分,它们是非素数,是正确的?或者,如果它们不是候选关键词的一部分,它们是否为非素数? – Feek

+3

PK没关系。 CKs呢。他们是首要的,因为他们在CK。 – philipxy

回答

4

循环是无关紧要的,它在BCNF和每个较低的NF。 BCNF的定义是,非平凡FD的所有决定因素都是超类。如果有多个CK(候选键),那就这样吧。 CK将确定其他CK的属性,因为CK确定每个属性。

PKs与标准化(和其他所有关系理论)无关,CKs很重要。一个PK只是一个你决定叫PK的CK。

这里有两个CK,{username}和{firstName,lastName}。主要属性(即CK中的属性)是用户名,名字为&姓氏。