Обычно я бы посоветовал использовать типы даты и даты независимо от ваших ограничений, поскольку она позволяет вам манипулировать датами и сравнивать их. Затем вы можете использовать триггеры, чтобы ограничить даты первым месяцем. Вам потребуется триггеров , чтобы вы не могли получить две строки для одного комбинированного месяца / года.
На самом деле, как справедливо указывает Damian_The_Unbeliever
в комментарии, вам не нужно запускать , если ваше намерение состоит в том, чтобы разрешить пользователям только вводить даты, в которых день месяца равен 1. В этом случае ограничений, вероятно, будет достаточно. Это только тот случай, когда вы хотите разрешить пользователям пытаться вставить любую дату, но фактически заставить ее стать первым днем того месяца, для чего потребуются триггеры.
Однако в этом случае я был бы весьма доволен установкой года / месяца с двумя столбцами, основанной на вашем случае использования.
Используя два столбца целочисленного типа, вам не нужно беспокоиться о триггерах, и вам, по-видимому, нет необходимости в массовой обработке содержимого таблицы на основе спецификаций столбцов.
Я бы не стал хранить их как один столбец целочисленного типа, если бы вы когда-нибудь предвидели необходимость обработки данных для данного года (независимо от месяца). Разделение года позволит получить отдельный индекс, который, вероятно, будет быстрее, чем получение диапазона значений YYYYMM
.
Серьезно, выберите тот, который, по вашему мнению, будет проще всего кодировать (и соответствует функциональным требованиям). Тогда if и only if, если вы обнаружите проблему с производительностью, изучите схему заново. Базы данных - это не вещи, которые можно задавать и забывать, вы должны постоянно следить за их проблемами и, при необходимости, что-то менять.