如何最好地表示SQL Server中的有理数?
我正在处理原生作为有理数提供的数据。我有一个灵活的通用C#类,它在C#中精美地表示这些数据,并允许转换为许多其他形式。不幸的是,当我转身并希望将其存储在SQL中时,我有几个解决方案,但没有一个非常令人满意。
这是一个例子。我有原始值
2/3
,我的new Rational<int>(2, 3)
容易在C#中处理。我想到的将它存储在数据库中的选项如下:
就像一个十进制/浮点,即各种精度和精确度的值=0.66666667
。
优点:这允许我查询数据,例如找到值&lt; 1。
缺点:当我在UI中显示这个简单的值时,它会失去准确性并且很难看。
存储为两个完全整数字段,例如分子=2
,分母=3
各种精度和准确性。
优点:这使我能够精确地表示原始值,并在以后以最简单的形式显示它。
缺点:我现在有两个字段来表示这个值,现在查询很复杂/效率低,因为每个查询都必须执行算术,例如: find numerator / denominator&lt; 1。
序列化为字符串数据,即"2/3"
。我将能够知道最大字符串长度并且有一个varchar可以容纳这个。
优点:我回到了一个领域,但有一个确切的代表。
缺点:查询几乎被破坏并支付序列化成本。
#1&amp;的组合#2。
优点:轻松/高效地查询值范围,并在UI中具有精确值。
缺点:三个字段(!?!)保存一个数据,必须保持多个表示同步,打破D.R.Y.
#1&amp;的组合#3。
优点:轻松/高效地查询值范围,并在UI中具有精确值。
缺点:回到两个字段来保存一个数据,必须保持多个表示同步,这会破坏D.R.Y.,并且必须支付额外的序列化成本。
有没有人有另一个开箱即用的解决方案比这些更好?还有其他我不考虑的事情吗?是否有一种相对简单的方法在SQL中执行此操作,我只是不知道?
没有找到相关结果
已邀请:
5 个回复
玩翁文醚碱
(注意你可能需要进行一些类型转换和验证Denominator不为零等)。 此外,SQL 2005添加了一个PERSISTED计算列,可以在查询时删除计算。
仇聘发栖
痴浪墨
谷起
埃庐