gpt4 book ai didi

sql - 如何在 SQL Server 中最好地表示有理数?

转载 作者:行者123 更新时间:2023-12-02 21:47:49 25 4
gpt4 key购买 nike

我正在处理本身作为有理数提供的数据。我有一个光滑的generic C# class which beautifully represents this data在 C# 中,并允许转换为许多其他形式。不幸的是,当我转身想要将其存储在 SQL 中时,我想到了几个解决方案,但没有一个非常令人满意。

这是一个例子。我有原始值 2/3我的new Rational<int>(2, 3)在 C# 中可以轻松处理。我想到的将其存储在数据库中的选项如下:

  1. 就像小数/浮点一样,即值 = 0.66666667各种精度和准确度。优点:这允许我查询数据,例如查找值 < 1。缺点:它失去了准确性,而且当我在 UI 中显示这个简单的值时,它很丑陋。

  2. 存储为两个精确的整数字段,例如分子 = 2 ,分母 = 3各种精度和准确度。优点:这使我能够精确地表示原始值并在以后以最简单的形式显示它。缺点:我现在有两个字段来表示该值,并且查询现在变得复杂/效率较低,因为每个查询都必须执行算术,例如求分子/分母 < 1。

  3. 序列化为字符串数据,即"2/3" 。我将能够知道最大字符串长度并有一个可以容纳它的 varchar 。优点:我回到了一个字段,但有精确的表示。缺点:查询几乎失败并付出序列化成本。

  4. #1 和 #2 的组合。优点:轻松/高效地查询值范围,并且在用户界面中具有精确的值。缺点:三个字段(!?!)来保存一份数据,必须保持多个表示同步,这会破坏 D.R.Y。

  5. #1 和 #3 的组合。优点:轻松/高效地查询值范围,并且在用户界面中具有精确的值。缺点:减少到两个字段来保存一份数据,必须保持多个表示同步,这会破坏 D.R.Y.,并且必须支付额外的序列化成本。

是否有人有比这些更好的另一种开箱即用的解决方案?还有其他我没有考虑的事情吗?有没有一种我不知道的相对简单的方法可以在 SQL 中执行此操作?

最佳答案

如果您使用的是 SQL Server 2005 或 2008,则可以选择 define your own CLR data types :

Beginning with SQL Server 2005, you can use user-defined types (UDTs) to extend the scalar type system of the server, enabling storage of CLR objects in a SQL Server database. UDTs can contain multiple elements and can have behaviors, differentiating them from the traditional alias data types which consist of a single SQL Server system data type.

Because UDTs are accessed by the system as a whole, their use for complex data types may negatively impact performance. Complex data is generally best modeled using traditional rows and tables. UDTs in SQL Server are well suited to the following:

  • Date, time, currency, and extended numeric types
  • Geospatial applications
  • Encoded or encrypted data

如果您可以忍受这些限制,我无法想象更好的方法来映射您已经在自定义类中捕获的数据。

关于sql - 如何在 SQL Server 中最好地表示有理数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com