什么是在数据库中保存“星级”的可持续方式?

时间:2010-04-20 13:41:31

标签: language-agnostic database-design

我将使用jQuery插件为用户呈现一个漂亮的界面

要求显示5颗星,总分10分(每颗2分) 到现在为止,我考虑过使用7/10作为该值的格式,但如果在将来的某个时候我会收到类似

的请求。
  

我们希望为用户提供更多选择,让我们将总分增加到20分(这样每颗星最多可以贡献4分)

我最终会得到一个表格,其中包含“星级评分”列的混合值:有些会像7/10,而其他人会像14/20一样。

您是否可以在数据库中获得这种差异并在逻辑层中处理它以使其保持一致?或者是另一种方式,以便查询表不会导致应用程序外的结果不一致?
也许浮点值可以帮助我,将该值存储为小于或等于1的数字是否更好?因此,在两个示例中的每一个中,存储在数据库中的结果值将是0,7,作为数字,而不是varchar,也可以在应用程序之外查询。

您怎么看?

6 个答案:

答案 0 :(得分:8)

有三种选择:

  1. 将值存储为分数(老实说,我可能会使用它,因为它是最低的维护
  2. 将值存储在两列中,一列用于评级,另一列用于最大值
  3. 将值存储为具有假定最大值的单个列,然后在最大值更改时更新所有值。
  4. 第一个选项是最便携的,因为评级的最大值和表示完全是客户端的(就数据库而言是客户端,而不是客户端,就像在用户的机器上完成的那样) )。

    第二个看起来似乎是任意复杂的,除非你希望继续显示7/10的评级为10星,而不是14星的20星。

    第三项需要最少的前期工作,但在对评级量表进行更改时需要大量数据库更新。

    重申一下,我建议将值存储为数据库中的floatdouble,并在客户端应用适当的比例。

答案 1 :(得分:7)

KISS
只需存储点数并具有应用逻辑以在IU中的星星中表示它 如果将来需求发生变化,您将调整逻辑并根据需要运行转换脚本。就是这样。

答案 2 :(得分:5)

我会将它存储为100个单位的简单整数。这样,​​如果您希望将来提高评级的准确性,您就会有足够的粒度。无需更改任何现有存储值。

答案 3 :(得分:0)

我会使用两列:一列保持评级,一列保持最高评级。由于该最大值可能在将来发生变化,因此我会将其与其余数据保持在一行中。您可以使用短整数,因此即使是大行数,所需的空间量也会非常小。

答案 4 :(得分:0)

我建议将分数存储为简单整数 - 如果评分为7/10,则在数据库中存储“7”。如果您需要将其更改为20分制,只需运行更新查询即可将所有现有数字加倍。如果你需要更高的精度,你可以使用浮点数,但对于大多数评级系统,整数应该没问题。

答案 5 :(得分:0)

我喜欢浮动的想法,但没有一个选项显着突出。我只是建议,无论你选择什么机制,都要确保列名称恰当。

浮动选项应该类似于star_rating_ratio。简单整数应为star_points_out_of_ten。百分制可以是star_rating_percent

(我在过去看到的列名称是“百分比”,但数据是一个简单的比例。这让我夜不能寐!)