какой тип данных использовать для года и месяца? - PullRequest
6 голосов
/ 18 октября 2011

мне нужно хранить год и месяц в моей таблице с двумя другими столбцами в следующем месяце тема и сведения о теме, что data type следует использовать

, если я должен использовать smalldatetime, и сохранять их, создавая дату как09/01/2011?

следует ли мне использовать два столбца varchar или int для хранения отдельного года и месяца, например 2011 09?

следует ли использовать один столбец varchar в каком хранилище их с конкатенацией, например 201109?

EDITED

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

Ответы [ 3 ]

7 голосов
/ 18 октября 2011

Обычно я бы посоветовал использовать типы даты и даты независимо от ваших ограничений, поскольку она позволяет вам манипулировать датами и сравнивать их. Затем вы можете использовать триггеры, чтобы ограничить даты первым месяцем. Вам потребуется триггеров , чтобы вы не могли получить две строки для одного комбинированного месяца / года.

На самом деле, как справедливо указывает Damian_The_Unbeliever в комментарии, вам не нужно запускать , если ваше намерение состоит в том, чтобы разрешить пользователям только вводить даты, в которых день месяца равен 1. В этом случае ограничений, вероятно, будет достаточно. Это только тот случай, когда вы хотите разрешить пользователям пытаться вставить любую дату, но фактически заставить ее стать первым днем ​​того месяца, для чего потребуются триггеры.

Однако в этом случае я был бы весьма доволен установкой года / месяца с двумя столбцами, основанной на вашем случае использования.

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

Я бы не стал хранить их как один столбец целочисленного типа, если бы вы когда-нибудь предвидели необходимость обработки данных для данного года (независимо от месяца). Разделение года позволит получить отдельный индекс, который, вероятно, будет быстрее, чем получение диапазона значений YYYYMM.

Серьезно, выберите тот, который, по вашему мнению, будет проще всего кодировать (и соответствует функциональным требованиям). Тогда if и only if, если вы обнаружите проблему с производительностью, изучите схему заново. Базы данных - это не вещи, которые можно задавать и забывать, вы должны постоянно следить за их проблемами и, при необходимости, что-то менять.

2 голосов
/ 18 октября 2011

Если вам когда-нибудь понадобится выполнить поиск по этим полям, я бы использовал формат даты. Два int будут занимать больше места, varchar должен быть заменен на char, потому что ваш размер установлен. Но, как я уже говорил, я бы придерживался формата даты.

0 голосов
/ 18 октября 2011

Я бы предложил иметь два отдельных столбца для месяца и года:

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