我需要将科学信息存储在数据库(sql server)中。在数据库中存储值的最佳方法是什么?“小于”,大于“是”信息的一部分。
示例:
PatientId:123 突变率:<3%
PatientId:999 突变率:3%
PatientId:456 突变率:10%
我需要能够对数据进行排序和过滤。突变率<3%优于3%
我怎么能这样做?
感谢您的帮助
答案 0 :(得分:9)
如何为澄清int添加第3列?
0 =小于
1 =小于或等于
2 =等于
3 =大于或等于
4 =大于
答案 1 :(得分:1)
最简单,通常使用这些情况的预定义值,例如此处,值3.0表示3%,其中2.99表示“小于3%”。
由于这些“小于”和“大于”值通常仅适用于范围的末尾,因此这种约定允许以标准方式处理所有过滤和使用单个字段值排序 。这种方法的主要缺点是,它意味着在应用程序级别对这些限制值进行硬编码,以用于显示目的等。
另一种方法是引入两列值,带有数值和“限定符”列,其中包含指示“精确值”或“小于”或“大于”的代码。虽然这种方法看起来更通用(并且在显示器级别等),但在“输入”级别经常需要一些硬编码。
答案 2 :(得分:0)
除非您想将数据分解为3个字段,例如less_equal_more(varchar)(&lt;。=,&gt;或等效文本),measure(deciaml)(3.5或其他任何精度级别)和units_of_measurment(varchar) (如百分比,或绝对英里或米 - whateever) - 你应该存储在varchar中。但是我会分解您的数据 - 这将使您的搜索问题更容易。处理全文搜索(如果将所有内容存储在一个字段中,则必须执行此操作)与分解数据时必须执行的查询相比非常困难。
答案 3 :(得分:0)
我建议将数据存储为间隔,即&lt; 3%将变为[0,3],3%将变为[3,3],依此类推。这可能需要数据库中的4列,每个端点一个,一个表示每个端点的间隔是打开还是关闭。将数值数据保持为数字,以便对其进行算术运算,以最适合您的访问和操作要求的方式对值“打开”和“关闭”进行编码。