Использование smalldatetime или int для хранения месяца в базе данных - PullRequest
0 голосов
/ 14 мая 2009

В настоящее время я разрабатываю систему ежемесячных контрольных списков для нашей организации. Пользователь может войти в систему, выбрать месяц, а затем представить список вопросов «да / нет», относящихся к этому месяцу, для целей нашей организации. Некоторые из вопросов используются в контрольном списке на срок более 1 месяца, поэтому я создаю таблицу пересечений, чтобы облегчить это отношение один ко многим. Это поля ChecklistMonth и ChecklistQuestionID.

Однако я не уверен, как сохранить поле ChecklistMonth. Если я использую smalldatetime, это кажется немного излишним, так как меня интересует только месяц. Это также будет выглядеть немного устаревшим в будущем. С другой стороны, кажется немного расточительным создать таблицу с полями MonthID и Month, чтобы идентифицировать только месяц.

Каково мнение каждого по этому поводу? Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 14 мая 2009

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

Если вы используете какой-либо тип даты и времени, вам всегда нужно помнить точные правила вокруг него. Вы храните это как первый день месяца? Средний день месяца? В каком году? Плюс, это дополнительная, ненужная комната, используемая в БД.

РЕДАКТИРОВАТЬ: Я думал, что я уже добавил это в свой ответ, но, видимо, нет ... не забудьте добавить проверочное ограничение в столбец:

CHECK (month BETWEEN 1 AND 12)
1 голос
/ 14 мая 2009

Я бы сохранил его как int. Я согласен с вами, что smalldatetime излишне, и может привести к путанице в будущем. Не говоря уже о том, что вам все равно придется вытащить месяц, чтобы проверить, является ли это месяц, к которому вы обращаетесь.

Вам нужна таблица перекрестных ссылок? Ваш MonthId должен быть 1 = январь, 2 = февраль до 12. Я думаю, что наличие поля с номером месяца является самодокументированным и не требует дополнительных справочных таблиц. Предполагая, что вы, конечно, имеете дело только с одним каландром.

1 голос
/ 14 мая 2009

Укусите пулю, используйте MonthID. Это лучшее решение в долгосрочной перспективе, поскольку оно яснее, и траты, связанные с наличием таблицы перечисления на месяц, тривиальны.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...