Как сохранить числовое значение, которое может иметь другие статусы в базе данных? - PullRequest
1 голос
/ 14 апреля 2010

Мне нужно хранить набор чисел в базе данных, которые импортируются из электронной таблицы.

Иногда число - это просто число. Но в других случаях значение может быть «отсутствующим», «нет данных» или пустым, и все они представляют разные вещи.

Каков будет хороший подход для хранения этих чисел в базе данных? Первоначально я должен был только учитывать N / A. Таким образом, я сделал это -1, поскольку я импортировал их (это работает, только если число никогда не может быть отрицательным очевидно). Я мог бы использовать другие отрицательные числа для других статусов. Однако мне это кажется неуклюжим.

Должен ли я хранить числа в виде строки, а затем применять преобразование во время использования? Должен ли я создать таблицу соответствия, в которой будут храниться различные статусы каждого значения?

Ответы [ 4 ]

4 голосов
/ 14 апреля 2010

Вам нужно два поля - статус и номер

2 голосов
/ 14 апреля 2010

Использование -1 было плохим проектом с самого начала: вы должны были использовать NULL, и в этот момент вы могли бы добавить дополнительный столбец для хранения кода состояния, чтобы узнать значение NULL.

1 голос
/ 14 апреля 2010

Я согласен с необходимостью двух полей статуса и номера (поэтому я согласен с К.М. и Скоттом)

Причины заключались в том, что если у вас есть что-либо, кроме чисел из электронной таблицы (включая ваши -1, а также NULL), агрегирующие функции, такие как SUM и Average, не будут давать правильных ответов.

Наличие дополнительного поля для присвоения статуса, значения которого включают в себя отсутствующие, N / A и числовые значения, когда у вас есть число, позволяет запрашивать эти статусы.

Использование NULL здесь не является обычным делом, поскольку оно не различает пропущенные значения и значения N / A

0 голосов
/ 14 апреля 2010

не храните в виде строки и конвертируйте при использовании, что является худшим, потому что вам придется тратить ресурсы на конвертацию каждый раз (навсегда), когда вы используете данные.

Хранить два поля:

NumberValue   number
NumberStatus  char(1)  -"M"=missing, "N"=n/a, "B"=blank, "V"=have a numeric value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...