【问题标题】:Am I Properly Normalizing this Data我是否正确规范化这些数据
【发布时间】:2018-06-03 01:29:20
【问题描述】:

我正在通过网络完成标准化练习,以测试我标准化数据的能力。这个特殊问题发现于:https://cs.senecac.on.ca/~dbs201/pages/Normalization_Practice.htm(练习 1)

这个问题所依据的表格如下:

可以从此表创建的非规范化表是:

为了符合第一范式,我必须通过将 visitdate、procedure_no 和 procedure_name 移动到各自的表中来消除表中的重复字段:

这也符合 2NF 和 3NF,这让我怀疑我是否正确执行了规范化过程。如果我没有正确地从 UNF 转移到 1NF,请提供反馈。

【问题讨论】:

  • 嗨。请use text, not images/links, for text (including code, tables & ERDs)。使用图像仅是为了方便补充文本和/或无法在文本中给出的内容。如果您有代表,请使用编辑功能内联,而不是链接 - 使您的帖子独立。永远不要给出没有图例/键的图表。
  • 请阅读并根据谷歌搜索“stackexchange 作业”的点击量采取行动。 为什么您认为“这也符合 2NF 和 3NF”?还有there is no one notion of 1NF,那么你应该做什么的参考是什么,所以我们可以检查你是否做到了?答案是您链接的页面上的链接。为什么对你来说不够?另外,如果你不解释你做了什么,你只是要求我们做你的功课。

标签: database database-normalization


【解决方案1】:

在第一步中,您可以创建以下表格(假设 pet_id 在表格中是唯一的):

Pets:   pet_id, pet_name, pet_type, pet_age, owner
Visits: pet_id, visit_date, procedure

进一步你可以拆分procedure,因为描述是重复的:

Pets:       pet_id, pet_name, pet_type, pet_age, owner
Visits:     pet_id, visit_date, procedure_id
Procedures: procedure_id, description

虽然同一个 visit_date 上可以有多个 procedures 对应同一个 pet_id,但我认为没有理由进一步拆分它们:日期(理论上)可以存储在 2 个字节中,然后拆分该数据会产生更多开销(加上额外的索引)。

您还需要将pet_age 更改为pet_birth_date,因为年龄会随着时间而变化。

由于这是您列表中的第一个练习,因此以上内容可能绰绰有余。

更进一步:

owner 可以有多个宠物,因此可以创建另一个表:

Pet_owners: owner_id, owner_name

然后只在Pets 表中使用owner_id。在实际系统中会有customer_id, name, address, phone, email 等 - 所以它应该总是在一个单独的表中。

您甚至可以对 pet_type 执行相同的操作,并将 id 存储在 1 或 2 个字节中,但这完全取决于您稍后要对数据执行的查询类型。

【讨论】:

    【解决方案2】:

    这个问题的表述很糟糕。看看最后两列。提问者并不意味着每列的类型都是集合。它们意味着同一行上的成对值构成集合的一个元素。他们应该有一列的值是三元组——日期、数字和名称。当他们只使用一列(最后一列)作为数字和名称时,他们就是这样做的。请注意,他们在您链接到的页面链接到的 pdf 中的解决方案有一个表格,其中包含所有三个日期、数字和名称。

    但是您应该如何知道这些值应该成对出现?毕竟,如果日期列给出了一组宠物的访问日期,而程序列给出了一组宠物曾经拥有过的程序编号和名称,那么我们不会应该采用一对值与集合的元素在同一行。不幸的是,您应该神奇地正确猜测。 (提示是宠物的日期和数字名称对的数量始终相同。)

    以上将插图中的空白区域留在那里,为设置值属性的垂直显示腾出空间;描绘的表格有 4 行。但也许它们在那里是因为您应该通过将空白子行解释为代表最近的非空白子行来从该插图中获得关系。那么该表将没有任何设置值列;描绘的表格有 9 行。碰巧这种解释不同意链接答案的 UNF 和 1NF 部分。

    如果他们不打算解释表格并且只是依靠您的猜测,那么如果他们将访问的程序日期、编号和名称放在一列下会更清楚——就像他们将程序编号和名称一样在一列中。但实际上,他们应该总是告诉你如何阅读插图。但实际上,应该总是问如何阅读插图。如果有任何来自相关课程/教科书的解释约定,那么您应该将它放在您的问题中让我们知道。

    不幸的是,“UNF”表几乎总是同样糟糕地给出,而没有任何关于如何解释它们的描述。 Also "1NF" has no standard meaning & there is no standard notion of "normalizing to 1NF".

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 2018-11-05
      • 2014-07-29
      • 2015-05-26
      • 2011-02-06
      • 2016-10-15
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多