【问题标题】:Understanding database normalization. How is the given table 3NF?了解数据库规范化。给定的表 3NF 怎么样?
【发布时间】:2015-12-13 06:45:17
【问题描述】:

这是对答案Difference between 3NF and BCNF in simple terms (must be able to explain to an 8-year old) 的跟进。为什么下表在 3NF 中? Pizaa,Topping 是候选键,Topping 类型部分依赖于 Topping,因此它甚至不在 2NF 中。

 Pizza    Topping    Topping Type
-------- ---------- -------------
1        mozarella  cheese
1        pepperoni  meat
1        olives     vegetable
2        mozarella  meat
2        sausage    cheese
2        peppers    vegetable

请详细说明。

【问题讨论】:

  • Topping Type 部分依赖于 Topping 是什么意思?部分依赖意味着存在函数依赖 x -> y,其中 x 是候选键的适当部分。函数依赖 x -> y 意味着对于任何给定的 x,y 都有一个值。我没有看到 Topping 和 Topping Type 之间的这种模式,或者 Pizza 和 Topping Type 之间的这种模式。
  • 归一化是基于数据一致的假设。如果没有,请在考虑规范化之前对其进行修复。
  • 规范化不是基于任何这样的假设。规范化的动机是通过适当的设计确保数据的正确性。由数据库设计者决定完整性规则应该是什么。
  • @Srinivas 从您在这里关于“进一步规范化”和“部分依赖”的评论以及关于“主要属性”的评论中,您似乎没有在学习和使用 定义这些技术术语
  • @Srinivas 我只在供应商网站上看到过垃圾,而且大部分 SO 数据库介绍、基础和理论也是无稽之谈。 (很好的是 sqlvogel 和 Mike Sherrill 'Cat Recall'。)维基百科也是,虽然 2NF+ 并不可怕。网上有一些文本,以及来自大学/学院的讲义/幻灯片,例如 stanford.edu。你需要记住定义,然后强迫自己根据它们精确地使用单词。 Silberschatz 等人的练习中潜伏着许多常见的数据库内容,而不是正文。

标签: database relational-database normalization database-normalization 3nf


【解决方案1】:

您链接到的答案表明该表有两个键:(Pizza,Topping)和(Pizza,Topping Type)。依赖 Topping->Topping Type 不违反 2NF 或 3NF,因为 Topping Type 是主要属性(候选键的一部分)。只有当 Topping Type 不是素数时,才会违反 2NF 和 3NF。

这个例子展示了 BCNF 和 3NF 之间的本质区别。 BCNF 关注的是所有属性的部分或非关键依赖关系,而不仅仅是非主属性。

【讨论】:

  • 在考虑部分依赖时,素数(或非素数)属性不应该与所选候选键相关吗?比如说,如果 (Pizza, Topping) 是我的候选键,那么 Topping Type 不应该是相对于所选候选键的非素数吗?
  • 没有。如果属性是任何候选键的一部分,则该属性为素数,否则为非素数。
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多