我和我的朋友正在建立一个网站,但存在重大分歧。该网站的核心是一个关于“人”的评论数据库。基本上人们可以输入评论,他们可以输入评论的人。然后,查看者可以在数据库中搜索评论中的单词或人名的一部分。它完全是用户生成的。例如,如果有人想对拼写错误的人名发表评论,他们可以,这没关系。所以可能有不同人的多种拼写被列为几个不同的条目(一些带有中间名,一些带有昵称,一些拼写错误等),但这一切都可以。我们不在乎人们是否对随机的人或虚构的人发表评论。
无论如何,问题在于我们如何构建数据库。现在它只是一个以评论 ID 作为主键的表,然后有一个字段用于评论的“人”:
评论 ID - 评论 - 人
1 - “他很奇怪” - 约翰史密斯
2 - “臭女孩” - 珍妮
3 - “同性恋” - 约翰史密斯
4 - “欠我 20 美元” - Jennyyyyyyyyy
一切正常。使用数据库,我能够创建列出特定“人”的所有“评论”的页面。然而,他对数据库没有规范化很着迷。我阅读了规范化并得知他错了。该表目前已规范化,因为评论 ID 是唯一的,并且规定了“评论”和“人”。现在他坚持“人”应该拥有它的 OWN 表,因为它是一个“事物”。我认为没有必要,因为即使“人”确实是更大的容器(一个“人”可以有很多关于他们的“评论”),数据库似乎运行得很好,“人”是评论 ID。我对不同的 SQL 选择使用各种 PHP 调用,以使其在输出和用户搜索和查看结果的不同方式上神奇地显得更加复杂,但实际上,设置非常简单。我现在让用户用竖起大拇指和不喜欢的方式对评论进行排名,并且我在同一张桌子上保留一个“分数”作为另一个字段。
我觉得目前没有必要为唯一的“人”条目设置单独的表格,因为“人”没有自己的“分数”或任何自己的属性。只有评论可以。我的朋友是如此坚持,以至于它是提高效率的必要条件。最后我说,“好吧,如果你要我创建一个单独的表,让'person'作为它自己的字段,那么第二个字段会是什么?因为如果一个表只有一个列,这似乎没有意义。我同意我们可能会在以后创建一个需要给“人”它自己的桌子,但我们可以处理那个。” 然后他说字符串不能是主键,我们将当前表中的“人”转换为数字,数字将成为新“人”表中的主键。对我来说,这似乎没有必要,它会使当前表格更难阅读。他还认为以后创建第二个表是不可能的,我们现在需要预测我们以后可能需要它来做一些事情。
谁是对的?