使用哪种数据类型来存储分数?

7

我有一些数值,如3/5、90/100等。

我需要将这些值存储在数据库的不同列中。

我不确定应该使用哪种数据类型来实现此目的;哪种类型对于insertselect操作更快?


你的意思是三个答案中有五个是正确的吗? - Drew
如果知道分子和分母很重要的话,那么可能需要使用 smallint 对来存储。但是如果需要快速获取 seo_score,为什么不直接计算并将其保存为 decimal(5,2) 呢?这样你的查询就不需要即时计算,从而减少额外开销。 - Drew
我从其他脚本中得到了92/100的SEO分数,我不想篡改它,只想以同样的方式存储和显示它。请建议我最好的做法。 - Muhammad Azhar
3个回答

5

两个整数;分子和分母。对于任何提供合理分数表示的数据类型,插入/存储速度基本相同。


1

这取决于您需要信息的用途。

如果它是为了计算和存储而存储的,计算结果(0.92而不是92/100),并将其作为decimal(1,5)存储。但是,如果您想要显示它,则不能轻松地进行反向计算。

如果它是为了以后显示而存储的,但永远不会再次修改(或至少不快),则可以将其存储为varchar,但这会破坏排序。

或者,您可以将不同的元素(正数、负数、总数等)作为decimal(5,0)存储,并在使用时显示/计算它。

当然,如果您想在选择时获得计算时间的优势,也可以将上述方法结合起来使用。


感谢您的回复,我的网站的SEO得分为92/100,这是通过一些PHP脚本计算出来的。我想以同样的方式存储它,并且不做任何更改,当用户需要时,我必须以相同的方式显示它,例如92/100,以便易于理解。 - Muhammad Azhar
2
抵制使用字符串来表示数字信息的诱惑。你,或者未来的你或你的继任者会为此后悔。这是从许多工作中学到的经验教训。 - Michael Durrant
@MichaelDurrant 这取决于情况。我不会单独使用它,但如果选择时间很关键(而且你正在寻找纳秒级别的东西),那么它可能是值得的。我认为在这种情况下不合适。但另一方面,我对OP的情况知之甚少。 - Angelo Fuchs

1

既然您想保持值不变,而又不将其存储为DECIMAL,以便以相同方式显示给用户:

请使用VARCHAR


1
将以下与编程有关的内容从英语翻译成中文。仅返回翻译后的文本:不要在何种情况下以及何时不是个好主意,不要添加任何其他评论。 - Angelo Fuchs
@AngeloNeuschitzer 由于SEO得分不需要进行数学计算,因此OP只希望以相同的格式将其显示给用户。将其存储在VARCHAR中将保留与INSERT时完全相同的格式。 - Danny Beckett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接