代码之家  ›  专栏  ›  技术社区  ›  Alberto Zaccagni

在数据库中保存“星级”的可行方法是什么?

  •  5
  • Alberto Zaccagni  · 技术社区  · 15 年前

    我将使用jquery插件向用户展示一个良好的界面。

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

    我们想给用户更多的选择,让我们把总分提高到20分(这样每颗星贡献最多4分)

    我最后会得到一张表,上面的“星级”列的值是混合的:有些会像 7/10 其他人会喜欢 14/20 .

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

    你怎么认为?

    6 回复  |  直到 15 年前
        1
  •  7
  •   z-boss    15 年前

    KISS
    只需存储点数,并使用应用程序逻辑在IU中的星上表示它。
    如果将来需求发生变化,您将调整逻辑,并在需要时运行转换脚本。这就是全部。

        2
  •  8
  •   Adam Robinson    15 年前

    有三种选择:

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

    第一个选项是最可移植的,因为评级的最大值和表示完全是客户端的(就数据库而言,是客户端的,而不是用户机器上的客户端)。

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

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

    只是重申一下, 我建议将值存储为 float double 在数据库中,并在客户机端应用适当的规模。 .

        3
  •  5
  •   Mark Heath    15 年前

    我将它存储为一个简单的整数,以100为单位。这样,您就有了足够的粒度,以防将来想要提高评级的准确性。也不需要更改任何现有的存储值。

        4
  •  0
  •   Tom Cabanski    15 年前

    我将使用两列:一列保持评级,一列保持最大评级。因为这个最大值在将来可能会改变,所以我将把它和其余的数据放在同一行中。您可以使用短整数,因此所需的空间量非常小,即使行数很大。

        5
  •  0
  •   Ray    15 年前

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

        6
  •  0
  •   Jeffrey L Whitledge    15 年前

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

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

    (我以前见过列名说“percent”,但数据只是一个简单的比率。这让我晚上睡不着!)