首页 > 解决方案 > 一个表可以有不依赖于主键的列,并且仍然在 2NF 中吗?

问题描述

我是数据库新手,过去两天一直在学习正常的表单/数据库实践。我为飞机检查数据创建了以下模型表,但我不确定它是否处于第二范式。检查 ID 是主键,但真正依赖于检查 ID 的唯一信息是日期。技术指令是机械师在进行飞机检查时遵循的指南,但它不会以任何方式影响检查 ID。检查员姓名也不依赖于检查 ID。

如果两列不依赖于主键,这个表会破坏 2NF 吗?

下表如下:

在此处输入图像描述

标签: databasepostgresqldata-modelingdatabase-normalization

解决方案


您的表的主键是单列,没有其他唯一键(或者看起来如此),因此它自动处于第二范式,因为主键没有(非空)正确子集。

我的其余答案涉及表格是否满足第三范式的问题(感谢您指出这一点,philipxy)。


主键和数据之间不必有任何逻辑依赖关系。事实上,主键通常是人为生成的数字。

关键是任何字段都不应依赖于主键之外的任何字段。

例如,如果Inspector Name您的示例中的 a 始终相同Technical Order,则该表将不是第二范式。在这种情况下,您将创建第二个表,其中Technical Order主键Inspector Name是一个字段。然后,您的原始表将仅包含第二个表Technical Order外键

以这种方式规范化您的数据模型可以避免冗余,从而减少存储空间并自动降低不一致的危险(现在不可能发生两行具有相同Technical Order但不同的Inspector Name.

要判断一个表是否被规范化,你必须知道数据的语义。


推荐阅读