这里是一个例子。我有原始值
2/3
,我的new Rational<int>(2, 3)
在C#中很容易处理。我考虑存储这个值的选项如下:
只作为十进制/浮点数,即值=
0.66666667
,具有各种精度和准确性。 优点:这使我能够查询数据,例如查找值 < 1。 缺点:它会失去精度,并且在我回到UI中显示这个简单值时非常丑陋。作为两个精确的整数字段存储,例如分子=
2
,分母=3
,具有各种精度和准确性。 优点:这使我能够精确地表示原始值,并在以后以最简单的形式显示它。 缺点:我现在有两个字段来表示这个值,查询变得复杂/不太有效率,因为每个查询都必须执行算术运算,例如查找分子/分母 < 1。序列化为字符串数据,即
"2/3"
。我将能够知道最大字符串长度并具有可以容纳此字符串的varchar。 优点:我回到了一个字段,但是有一个精确的表示。 缺点:查询基本上已经破坏了,需要支付序列化成本。#1和#2的组合。 优点:轻松/高效地查询值范围,和在UI中拥有精确值。 缺点:需要三个字段来保存一个数据片段,必须保持多个表示同步,这会破坏D.R.Y.原则。
#1和#3的组合。 优点:轻松/高效地查询值范围,和在UI中拥有精确值。 缺点:回到了两个字段来保存一个数据片段,必须保持多个表示同步,这会破坏D.R.Y.原则,并且必须支付额外的序列化成本。