【发布时间】: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