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

Alb*_*gni 5 language-agnostic database-design

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

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

我们想给用户更多选择,让我们将总分增加到20(这样每颗星最多贡献4分)

我最终会得到一张表格,其中包含"星级"栏目的混合值:有些7/10人会像其他人一样14/20.

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

你怎么看?

Ada*_*son 8

有三种选择:

  1. 将值存储为一个分数(老实说,这是我可能会使用的,因为它是最低的维护
  2. 将值存储在两列中,一列用于评级,另一列用于最大值
  3. 将值存储为具有假定最大值的单个列,然后在该最大值更改时更新所有值.

第一个选项是最便携的,因为评级的最大值和表示完全是客户端(就数据库而言是客户端,而不是客户端,就像在用户的机器上完成的那样).

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

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

只是重申,我建议存储值作为floatdouble在数据库和应用无论是规模在客户端相应..


z-b*_*oss 7

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

  • 我认为这是最好的选择,只需将其存储为`tinyint`1..5.如果将来需求发生变化,则需要将所有现有数据更新为新规模的五分钟脚本.如果要求*没有*改变(这可能更有可能),那么你就没有浪费时间实施一些没有任何好处的东西.此外,如果需求发生变化,它们不太可能以您期望的方式发生变化;) (2认同)
  • 在可能的情况下,数据应表达其含义.虽然这是(*非常小)*比将值存储为浮点数更容易,但它的表现力较差.值.5非常清楚,它表示"5/10"或"10/20"或无论比例是什么,因为用户永远不能明确输入".5".值"5"不具有表现力,因为它可能意味着5/10或5/20或5/45,因为"5"是有效的用户评级.如果处理花车比较困难,我会同意......但事实并非如此. (2认同)

Mar*_*ath 5

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

  • 当你可以将值存储为"浮动"时,为什么要引入人工尺度(100)? (3认同)