6

我需要将科学信息存储在数据库(sql server)中。在“小于”、“大于”是信息的一部分的数据库中存储值的最佳方法是什么。

例子:

患者 ID:123 突变率:<3%

患者 ID:999 突变率:3%

PatientId:456 突变率:10%

我需要能够对数据进行排序和过滤。<3% 的突变率优于 3%

我该如何解决这个问题?

感谢您的帮助

4

4 回答 4

9

为澄清的 int 添加第三列怎么样?

0 = 小于
1 = 小于或等于
2 = 等于
3 = 大于或等于
4 = 大于

于 2009-11-30T22:35:23.597 回答
1

简单的,通常是为这些情况使用预定义的值,例如,这里的值 3.0 表示 3%,而 2.99 表示“小于 3%”。

由于这些“小于”和“大于”值通常仅适用于范围的末端,因此这种约定允许以标准方式使用单个字段值处理所有过滤和排序。这种方法的主要缺点是它意味着在应用程序级别对这些限制值进行硬编码,用于显示等目的。

另一种方法是引入一个两列 value,一个数字值和一个“限定符”列,其中包含指示“精确值”或“小于”或“大于”的代码。虽然这种方法看起来更通用(在显示器等级别),但在“输入”级别通常需要一些硬编码。

于 2009-11-30T22:35:29.350 回答
0

除非您想将数据分解为 3 个字段,例如 less_equal_more(varchar) (<.=、> 或文本等价物)、measurement (deciaml)(3.5 或您的精度级别)和 units_of_measurment(varchar) (如百分比,或以英里或米为单位的绝对值 - 无论如何) - 你应该存储在 varchar 中。但我会分解您的数据 - 将使您的搜索查询更容易。与分解数据时必须执行的查询相比,处理全文搜索(如果将所有内容都存储在一个字段中,则必须这样做)相当困难。

于 2009-11-30T22:40:01.010 回答
0

我建议将您的数据存储为间隔,即 <3% 将变为 [0,3),3% 将变为 [3,3],依此类推。这可能在您的数据库中占用 4 列,一个用于每个端点,一个用于表示间隔在每个端点是打开还是关闭。保持数字数据为数字,以便您可以对其进行算术运算,以最适合您的访问和操作要求的方式对值“打开”和“关闭”进行编码。

于 2009-12-01T08:12:37.737 回答