【问题标题】:How to check 3NF, 4NF & BCNF of table?如何检查表的 3NF、4NF 和 BCNF?
【发布时间】:2021-08-04 22:13:40
【问题描述】:
ID Name Number Quantity Measurement
101 A 2541 5 cm
102 A 2341 5 cm
103 B 4561 15 cm
104 B 1896 15 cm
105 C 1546 30 mt
106 C 2531 30 mt
107 C 7852 30 mt

我有上面的表格,现在我想将其转换为 BCNF,第 4 和第 5 范式。我已经尝试并在线阅读,也浏览了 youtube 视频,但无法为这张桌子做。

任何帮助都是可观的。提前致谢。

编辑:这是我的想法

  1. 1NF: 对于任何表都处于第一范式-
  • 表的所有非键列都应依赖于主键。
  • 表中应该有唯一的条目。

因此,在仔细查看表格时,我们注意到表格已经处于第一范式,因为它满足上述属性。在这里,我们认为“ID”是我们的主键。表格结构与已经给出的类似,但为了方便起见,我们将对其进行重新排序。我们会将表格视为 - [ID, Name, Number, Quantity, Measurement]。

  1. 2NF: 使表处于第二范式-
  • 表应该是 1NF。
  • 所有非键列都依赖于整个主键。
  • 具有简单主键的表自动采用第二范式。

因为,上述所有属性都满足当前表结构,它也处于 2NF 中。因此,表结构是- [ID, Name, Number, Quantity, 测量]。

  1. 3NF(不太确定): 当一个非键列依赖于另一个非键列时,它发生在 2NF 中。我们在这里给出的表格中也发生了类似的事情。数字和测量取决于导致冗余的名称。 此外,对于表在 3NF-
  • 表格应为 2NF。
  • 所有非键列都依赖于键、整个键,除了 钥匙。 因此,我们需要规范化我们的表格。为此,我们将表格分解如下 - ✓ 表 1:ID(PK)、编号、名称 ✓ 表 2:名称(PK)、编号 ✓ 表 3:名称 (PK)、测量值

【问题讨论】:

  • 只是贴表并不能说明Name和Number的关系。
  • @eshirvana 我已经用我的想法编辑了我的问题,并尝试了 1、2 和 3NF。
  • @GilbertLeBlanc 您现在可以检查一下,如果您对 BCNF 和 4NF 有更多疑问或有好的解决方案,请告诉我。
  • 我从不关心表何时处于 1NF、2NF 等状态。我发现这些非常理论化,因为在创建数据库时,我们会查看规范化而不考虑单个阶段。在您的样本数据中,您始终拥有相同的数量和测量名称。不过,这可能只是巧合。如果是这种情况,那么表就没有问题。如果不是这种情况,则表未规范化,应修复数据模型。
  • 您研究的 1 个具体的非重复问题是什么? PS 那些 NF 定义是不正确的。您可以在(好的)教科书和(正确的)SO 答案中找到正确的定义。可悲的是,有很多不好的。网络帖子和视频毫无用处。现在,您的帖子实际上是在询问您弄错或不确定的第一个定义。那是一个常见问题。请参阅How to Ask、其他help center 链接、点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。 PS "1NF" has many meanings. PS NFs >1 依赖于 CK 和 FD,但你没有提到它们。

标签: database-design database-normalization


【解决方案1】:

表格数据不言自明。

通过在没有上下文的情况下查看表数据,即没有解释数据代表什么,人们无法判断它是否与正常形式匹配。

让我们看看你给我们看的表格:

  • 如果您表中的Number2541 表示“1941 年5 月的2 件”,那么它违反了1NF,因为列数据不是原子的。
  • 如果Name = 'A' 是一个名为 A 的产品,长度为 5 厘米,那么为什么该信息会在表中出现两次?违反了 2NF。
  • 如果Name 是唯一的产品名称,Number 是唯一的个人编号,并且一行表示一个人拥有的产品数量 (Quantity x Measurement),则该表不违反我知道的任何 NF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2014-01-02
    • 2013-11-14
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多