【发布时间】:2011-11-29 19:00:59
【问题描述】:
考虑这张表:
+-------+-------+-------+-------+
| name |hobby1 |hobby2 |hobby3 |
+-------+-------+-------+-------+
| kris | ball | swim | dance |
| james | eat | sing | sleep |
| amy | swim | eat | watch |
+-------+-------+-------+-------+
兴趣类型没有优先级,所有兴趣都属于同一个领域。也就是说,表格中的爱好可以移动到任何hobby# 列上。不管在哪一栏,一个特定的爱好都可以在任何一栏。
此表违反了哪个数据库规范化规则?
编辑
问。 “爱好列表 [...] 是任意顺序的”?
A.是的。
问。表有主键吗?
A.是的,假设键是一个名为user_id 的AUTO_INCREMENT 列类型。
问题是hobby# 的列是否是重复组。
旁注:这不是家庭作业。这是一场辩论,始于问题SQL - match records from one table to another table based on several columns 的cmets。我相信这个问题是违反 1NF 的一个明显例子。
但是,另一个人认为我“已经陷入了 1NF 的谬误之一。”该论点基于文章 @987654322 的“重复组的歧义”部分@。
我写这篇文章不是为了羞辱他、我或任何人。我写这篇文章是因为我可能错了,而且我显然遗漏了一些东西,也许这个人对我的解释不够好。
【问题讨论】:
-
我不知道所有的技术术语,但对我来说,这违反了“如果有人有 4 个爱好怎么办?”规则。 :)
-
@JoeEnos 是的,这也是它对我的作用。这正是 1NF 处理的问题。
-
这简直是邪恶的......一代又一代人将不得不忍受一生中只允许有 3 种爱好的痛苦......谁同时需要 3 种以上的爱好?谁需要超过 640kb?
-
如果一个人有 4 个爱好,那么表格不能存储第 4 个。这不是违反 1NF - 它只是意味着您的设计有限制。如果要求只存储三个爱好,那么这对您来说可能不是问题。
-
我虽然你说过,“问题是 hobby# 列是否是重复组。”如果列可以为空,则违反 1NF,重复组的问题没有实际意义。
标签: database database-design relational-database database-schema database-normalization