【问题标题】:Can a table have columns that are not dependent on primary key, and still be in 2NF?一个表可以有不依赖于主键的列,并且仍然在 2NF 中吗?
【发布时间】:2019-07-21 12:45:04
【问题描述】:

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

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

表格如下:

【问题讨论】:

  • NF 使用 FD。但你不会说你认为他们是什么。 NF 使用 CK,而不是 PK。 2NF 涉及部分和完整的 FD,但您没有提及它们。另外,为什么您认为“如果两列不依赖于主键”与 2NF 有任何关系?你为什么要考虑它?按照教科书展示您的工作,并就您遇到的第一个问题提出具体问题。 PS 如果你这样做,你可能会发现当前接受的答案是错误的和困惑的。
  • PS“唯一真正依赖于检查 ID 的信息是日期”没有意义,因为每一列在功能上都依赖于每个 CK/PK。 “以任何方式影响检查 ID”没有意义,因为 FD 与“影响”无关。 (无论“真的”和“以任何方式”是什么意思。)这篇文章没有显示对所使用术语的理解。这说明了为什么你应该按照教科书展示你的工作的步骤和理由——或者我们不能告诉你你在哪里做对和错,或者有时甚至无法理解写作(如果有意义的话)。谷歌“stackexchange 作业”。
  • 除非这不是教科书。实际上,我确实必须为我的工作实现一个数据库。我以前没有任何数据库经验,所以我试图清楚地掌握一些事情,这样我就不会最终实现一个设计糟糕的数据库。
  • 不管是作业还是你的工作,既然你发了这个问题,你就需要看一本教科书。这个问题缺乏太多的理解,以至于回答它或解释你的问题的错误之处需要从头开始解释。这对 SO 来说太宽泛了。看:2NF没用!然而,2NF 意味着一个特殊的东西,涉及 FD 和 CK 而不是 PK。如果您有教科书/正确的定义,那么您会发现您需要首先识别 FD。从那里开始。发布一个问题。提供所有步骤并说明理由,并询问您首先遇到的问题。
  • 数十种已出版的学术信息建模和数据库设计教科书以pdf形式在线免费提供。 stanford.edu 有免费的在线数据库课程。

标签: database postgresql data-modeling database-normalization


【解决方案1】:

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

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


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

关键是没有字段应该依赖于任何字段除了主键。

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

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

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

【讨论】:

  • “没有字段应该依赖于除主键之外的任何字段”是错误的。请参阅 2NF 的定义。
  • 你说得对,我说的是 3NF。我试图修正答案。
  • 3NF 是错误的,仍然是 2NF。您的陈述没有反映含义/定义的细节。参见 3NF 的定义。例如素数很重要。例如,您说唯一键(超级键),但您可能是指 CK。例如,您重复了一个常见的误解,即所有 CK 都简单意味着 2NF。 (同样必要的是,{} 也不能确定一列。)但是这个问题太模糊了,无论如何都不能做任何事情。总之,要看到这些问题,您所要做的就是按照我对问题的评论并尝试通过参考(好的)学术教科书来证明您的主张。
  • 想象一个非复合键,其中某些东西依赖于它的一部分是可以想象的,但不是很现实。我的目标是将定义翻译成数据库从业者熟悉的语言,但有可能失去精确度。毕竟归一化是有实用价值的。对我来说很明显inspection_id 是检查表的任何描述的唯一关键,所以虽然我草率的回答肯定掩盖了区别,但它不应该是错误的。这几乎不是制定严格定义的地方,而且我的印象是他们没有被要求。
  • 但我真的很感谢你们的 cmets,他们让我重新阅读了定义,正如你们可能猜到的那样,在我接受学术培训后的这些年里,这些定义在我脑海中并不新鲜。
猜你喜欢
  • 1970-01-01
  • 2010-11-13
  • 2018-06-23
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多