Database 如何确定未规范化数据库的候选密钥?

Database 如何确定未规范化数据库的候选密钥?,database,database-normalization,candidate-key,Database,Database Normalization,Candidate Key,在我的数据库类中,我们正在废弃候选密钥,这在某种程度上是有意义的,直到我读到关于候选密钥的这篇文章: 候选键是表中的一列或一组列,可以在不引用任何其他数据的情况下唯一标识任何数据库记录。每个表可能有一个或多个候选键,但一个候选键是唯一的,称为主键。 如果这是真的,候选密钥必须能够唯一地标识数据库中的所有数据,那么为什么我的老师向我们展示了这个示例: 她说NIN和contractNo是候选键。显然,这些属性对候选键最有意义,但它们不能唯一地标识行中的所有其他属性。 例如,NIN不确定hotelN

在我的数据库类中,我们正在废弃候选密钥,这在某种程度上是有意义的,直到我读到关于候选密钥的这篇文章:

候选键是表中的一列或一组列,可以在不引用任何其他数据的情况下唯一标识任何数据库记录。每个表可能有一个或多个候选键,但一个候选键是唯一的,称为主键。

如果这是真的,候选密钥必须能够唯一地标识数据库中的所有数据,那么为什么我的老师向我们展示了这个示例:

她说NIN和contractNo是候选键。显然,这些属性对候选键最有意义,但它们不能唯一地标识行中的所有其他属性。 例如,NIN不确定hotelNo,因此我不理解候选密钥的真正定义?这不适用于未规范化的数据库吗?如果没有,那么我们如何确保选择正确的候选密钥和主键

请为我澄清这一点,提前谢谢你。

候选密钥可以由多个属性组成。在这种情况下,很可能您的老师说NIN和contractNo是候选键,这意味着它们都唯一地标识关系的所有行。@Renzo我也这么认为,但她也写道:“很明显,NIN和contractNo可以是候选键。”。如果她想让它们一起使用,她不会说“候选键”(单数)吗?我不知道属性名称的含义,但在这种情况下,contractNo和NIN都有重复的值。因此,它们不可能是候选密钥。相反,它们的组合是唯一的,因此它们的组合可以标识关系中的行。当然,我们只能说,在这个特定的例子中,它们的价值组合是独一无二的。候选键对于关系的所有可能实例都应该是唯一的,这只能通过了解数据的含义来建立。哦,好的,我明白你的意思了。然而,您认为这个最终的规范化数据库正确吗?因为我看不出这是多么有用,因为您不能仅使用NIN(个人身份号码)访问任何数据。例如,假设我想知道一个拥有某个NIN号码的人在哪个酒店工作,那么这个数据库似乎不是特别有用。你可以通过连接三个关系找到NIN的酒店。分解被归一化。