Language agnostic 什么是可维持的储蓄方式;星级评定“;在数据库中?
我将使用jQuery插件向用户展示一个漂亮的界面 要求显示5颗星,总分最高为10分(每颗星2分)。Language agnostic 什么是可维持的储蓄方式;星级评定“;在数据库中?,language-agnostic,database-design,Language Agnostic,Database Design,我将使用jQuery插件向用户展示一个漂亮的界面 要求显示5颗星,总分最高为10分(每颗星2分)。 现在我考虑使用7/10作为该值的格式,但是如果将来某个时候我会收到这样的请求呢 我们想给用户更多的选择,让我们把总分提高到20分(这样每个明星最多贡献4分) 最后,我将为“星级”列提供一个混合值的表:一些类似于7/10,而另一些类似于14/20 您可以在数据库中使用这种差异,并在逻辑层中处理它以使其保持一致吗?或者是首选的另一种方式,以便查询表不会在应用程序之外导致不一致的结果? 也许浮点值可以帮
现在我考虑使用
7/10
作为该值的格式,但是如果将来某个时候我会收到这样的请求呢
我们想给用户更多的选择,让我们把总分提高到20分(这样每个明星最多贡献4分)
最后,我将为“星级”列提供一个混合值的表:一些类似于7/10
,而另一些类似于14/20
您可以在数据库中使用这种差异,并在逻辑层中处理它以使其保持一致吗?或者是首选的另一种方式,以便查询表不会在应用程序之外导致不一致的结果?也许浮点值可以帮助我,将该值存储为小于或等于1的数字是否更好?因此,在这两个示例中,存储在数据库中的结果值将是
0,7
,作为一个数字,而不是一个varchar,也可以在应用程序外部查询。你觉得怎么样?我会使用两列:一列用来保存评级,另一列用来保存最高评级。因为这个最大值将来可能会改变,所以我会将它与其他数据一起保存在同一行中。您可以使用短整数,这样即使行数很大,所需的空间也非常小。有三个选项:
重申一下,我建议在数据库中将该值存储为
float
或double
,并在客户端应用适当的刻度。我建议将您的分数存储为简单整数-如果评分为7/10,则将“7”存储在db中。如果需要将其更改为20分scale,只需运行一个更新查询,将所有现有数字翻倍。如果需要更高的精度,可以使用浮点数,但对于大多数评级系统,整数应该可以。我会将其存储为一个简单的整数,以100为单位。这样,您就有足够的粒度,以备将来需要提高评级的精度。否也需要更改任何现有的存储值。只需存储点数并使用应用程序逻辑在IU中的星号中表示即可。
如果将来需求发生变化,您将调整逻辑,并在需要时运行转换脚本。仅此而已。我喜欢浮动的想法,但没有一个选项非常突出。我只是建议,无论您选择何种机制,请确保列的名称正确 浮动选项应该类似于
star\u rating\u ratio
。简单整数应该是star\u points\u out\u of十
。百分制可以是star\u rating\u percent
(我以前见过列名上写着“百分比”,但数据是一个简单的比率。这让我晚上睡不着觉!)为什么要引入一个人工刻度(100),而你只需要将数值存储为一个
浮点值
?用户通常会说“这是10分之7”,这只是说“它是70%”的一种奇特的方式。将数据存储为百分比是一个逻辑解决方案,因为百分比永远不会改变。为什么不使用一个漂亮的整数,如256?:)Kiss在搜索解决方案时总是会从我身边溜走,谢谢。我认为这是最好的选择,只需将其存储为tinyint
1..5。如果将来需求发生变化,则需要五分钟的脚本来将所有现有数据更新到新的规模。如果需求没有改变(这可能更大),那么您就不会浪费时间来实现一些毫无益处的东西。此外,如果需求发生变化,它们不太可能以您期望的方式发生变化;)在可能的情况下,数据应表达其含义。虽然这比将值存储为浮点更容易(稍微容易),但它的表现力较差。值.5很清楚,它表示“5/10”或“10/20”或任何刻度,因为用户永远无法显式输入.5。由于“5”是一个有效的用户评级,因此“5”的值并不像5/10、5/20或5/45那样具有表现力。如果处理浮点数比较困难,我同意……但事实并非如此。我建议简单地命名整数值点
,并在评论中给出更多细节。如果系统更改为(比如说)20个点中的点,并且在UI中不使用星号,则类似于“星号”的名称将变得不好。@z-boss-如果列的解释更改,那么它的名称也应该更改。“但是,每一个使用该栏的地方也必须改变!”是的。这正是重点。破坏性的改变应该早一点破坏,而不是晚一点破坏。对于解释得很好的答案+1,但我想我会按照z-boss的建议去做。在我的场景中,这是最简单的事情,将来可能的转换不会花那么多时间。