单独的表或同一个表?

时间:2010-01-18 08:16:51

标签: database-design

所以我基本上有一个评论表,对于评级我有超过8个因素。因为我的评论表已经有5个字段,我是否更好地为评级创建一个全新的表格或将其添加到评论表中?

更新 我应该用标准这个词代替因子。评级1-5 - 幽默,可读性,客户服务等......哦,有些是用户输入。例如,谁帮助过你? Max Powers

5 个答案:

答案 0 :(得分:2)

我认为你应该为它创建一个单独的表。这会让事情变得清晰,也不会产生任何开销。

答案 1 :(得分:2)

有一种称为Database normalization的理论。您应该使用third normal form one来创建数据库,这应该会为您的评分生成一个单独的表格。

虽然维基百科的文章确实有点令人困惑,但tutorial并非如此。

答案 2 :(得分:1)

无需将审阅实体划分为多个表,除非您必须支持任意一组因子(在第二种情况下,它将是评论和因子之间的1:N关系)。

如果您的评论总是由8个属性组成,例如,那些属性将是同一个表中的不同属性。不同的因素可能有不同的数据类型(服务1-10,照明:“黑暗/明亮”,障碍可访问:“是/否”,菜肴:“中国”)等,所以你不一定能够轻松将它们移动到sep表中,因为它们不是同一个实体类型。

答案 3 :(得分:1)

就个人而言,我会有一个单独的评级表,我会考虑更进一步 - 而不是将8个不同的评级因子作为列,而是将它们作为行代替。所以你的表格看起来像这样:

Rating Table
------------
PrimaryKey
ReviewForiegnKey
RatingTypeForiegnKey
RatingValue

RatingType Table
----------------
PrimaryKey
RatingType

这样您的评级系统可以在不更改先前输入的数据的情况下进行扩展 - 只需在RatingType表中添加另一个RatingType,然后在Rating表中开始为其输入行。

答案 4 :(得分:0)

我完全赞同Henrik关于规范化的说法,很棒的链接!

简单地说,标准化可以概括为一个笑话:“整个关键,只有关键,所以帮助我Codd”(Codd是发明关系数据库的家伙)。

每个表都必须包含“整个密钥”,这意味着它必须包含有关某个实体的所有信息。

它也必须“只有密钥”,因此您无法在一个表中存储有关两个不同实体的数据。

在哪种情况下,评级是否应放在单独的表中取决于其性质。它是评级的一部分吗?你有什么理由把它放在另一张桌子里,或者只是因为桌子上有太多字段?“

就个人而言,我认为没有任何理由将其放在一个单独的表中,除非你想遵循“良好做法”并将其放在一个单独的表中以满足第三范式。