我和我的朋友正在建立一个网站,并有重大分歧。该网站的核心是一个关于“人”的评论数据库。基本上人们可以输入评论,他们可以输入评论的人。然后观众可以在数据库中搜索评论中的单词或人名的部分内容。它完全由用户生成。例如,如果有人想发表对某人姓名的拼写错误版本的评论,他们可以,而且没关系。因此,可能会有多个不同人物的拼写被列为几个不同的条目(一些中间名,一些昵称,一些拼写错误等),但这一切都可以。我们不在乎人们是否对随机的人或想象中的人发表评论。不必要的标准化
无论如何,问题是关于我们如何构建数据库。现在,它只是一个表注释ID作为主键,再有就是对“人”的注释字段约为:
评论ID - 评论 - 人
1 - “他很奇怪” - 约翰·史密斯
2 - “臭丫头” - 珍妮
3 - “同性恋” - 约翰·史密斯
4 - “欠我$ 20” - Jennyyyyyyyyy
一切工作正常。使用数据库,我可以创建列出特定“人员”的所有“评论”的页面。但是,他着迷于数据库没有正常化。我读了正常化,并了解到他错了。表格IS目前已经规范化,因为评论ID是唯一的并且决定了'评论'和'人员'。现在他坚持认为'人'应该拥有自己的桌子,因为这是'事情'。我不认为这是必要的,因为即使'人'真的是更大的容器(一个'人'可以对他们有很多'评论'),数据库似乎运行得很好,'人'是属性评论ID。我针对不同的SQL选择使用了各种PHP调用,使其在输出中以神奇的方式显得更加复杂,用户可以通过不同的方式搜索并查看结果,但实际上,安装非常简单。我现在让用户用竖起大拇指向下排列评论,并在同一张桌子上保留一个“分数”作为另一个字段。
我觉得目前没有必要为独特的“人物”条目设置单独的表格,因为“人物”没有自己的“分数”或他们自己的任何属性。只有评论可以。我的朋友是如此坚持以至于有效率。最后,我说:“好的,如果你想要我创建一个单独的表并让'person'成为它自己的字段,那么第二个字段是什么?因为如果一个表只有一列,那么看起来毫无意义。我们以后可能会创造一个需要给予'人'它自己的桌子,但我们可以处理那个。“然后他说,字符串不能是主键,并且我们会将当前表中的'persons'转换为数字,并且这些数字将成为新'person'表中的主键。对我而言,这看起来没有必要,它会使当前的表更难以阅读。他还认为,以后不可能创建第二张表格,而且我们现在需要预测我们以后可能需要它。
谁是对的?
我同意弗兰基/你的朋友。以后做这种改变虽然不是不可能,但是很尴尬,容易出错。 – Jaydee 2010-09-10 15:41:26
任何人都可以解释如何为任何功能依赖性的左侧没有出现的属性创建代理键来标准化数据库吗?正如OP所说,Person决定什么都不会(并且永远不会)。你会为名为'Stuff'的属性提供相同的建议吗?这里可能有一个正常化问题,但它不涉及Person。 – NealB 2010-09-10 20:47:37
@NealB我作为一名教师的经历以及提问的方式让我相信OP是有偏见的。简单的事实是,该字段称为人而不是文本,与IMO相关。 – Frankie 2010-09-10 22:03:24