Как хранить «меньше чем», равно и «больше чем» в базе данных - PullRequest
6 голосов
/ 01 декабря 2009

Мне нужно хранить научную информацию в базе данных (sql server). Каков наилучший способ сохранить значение в базе данных, где «меньше чем», больше чем «является частью информации.

Пример:

PatientId: 123 Коэффициент мутации: <3% </p>

PatientId: 999 Коэффициент мутации: 3%

PatientId: 456 Коэффициент мутации: 10%

Мне нужно иметь возможность сортировать и фильтровать данные. Коэффициент мутации <3% лучше, чем 3% </p>

Как я могу это сделать?

Спасибо за вашу помощь

Ответы [ 4 ]

9 голосов
/ 01 декабря 2009

Как насчет добавления 3-го столбца для уточняющего целого?

0 = Менее
1 = меньше или равно
2 = равно
3 = больше или равно
4 = больше чем

1 голос
/ 01 декабря 2009

Самый простой , как правило, использует предварительно определенные значения для этих случаев, например, здесь значение 3,0 означает 3%, при этом 2,99 означает «менее 3%».

Поскольку эти значения «Меньше» и «Больше» обычно применяются только в концах диапазона, такое соглашение позволяет обрабатывать всю фильтрацию и упорядочение с одним значением поля стандартным образом, Основным недостатком этого подхода является то, что он подразумевает жесткое кодирование этих предельных значений на уровне приложения для целей отображения и тому подобного.

Альтернативой является введение значения в два столбца , с числовым значением и столбцом «квалификатора», который содержит код, указывающий «точное значение» или «меньше чем» или «больше чем». Хотя этот подход представляется более общим (и именно на уровне дисплея и т. Д.), На уровне «ввода» часто требуется некоторое жесткое кодирование.

0 голосов
/ 01 декабря 2009

Я бы посоветовал хранить ваши данные как интервалы, то есть <3% станет [0,3), 3% станет [3,3] и так далее. Это может занять 4 столбца в вашей базе данных, по одному для каждой из конечных точек и один для обозначения, является ли интервал открытым или закрытым в каждой конечной точке. Сохраняйте числовые данные в числовом виде, чтобы вы могли выполнять на них арифметику, кодировать значения «открыто» и «закрыто» таким образом, который наилучшим образом соответствует вашим требованиям к доступу и манипулированию. </p>

0 голосов
/ 01 декабря 2009

Если вы не хотите разбивать данные на 3 поля, например less_equal_more (varchar) (<. =,> Или текстовые эквиваленты), измерение (deciaml) (3,5 или любой другой уровень точности) и units_of_measurment (varchar) (например, в процентах или абсолютных в милях или метрах - в любом случае) - вы должны хранить в varchar. Но я бы разбил ваши данные - облегчит ваши поисковые запросы. Работа с полнотекстовым поиском (что вам придется делать, если вы храните все в одном поле) довольно сложна по сравнению с запросами, которые вам придется делать, если вы разбиваете свои данные.

...