Ограничить столбцы varchar() конкретными значениями?

Есть ли способ указать, например, 4 различных значения для столбца varchar в MS SQL Server 2008?

Например, мне нужен столбец Frequency (varchar), который принимает только "Daily", "Weekly", "Monthly", "Yearly" как возможные значения

Можно ли установить в SQL Server Management Studio при создании таблицы?

Ответ 1

Вы уже посмотрели на добавление check constraint в этот столбец, который ограничивал бы значения? Что-то вроде:

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)

Ответ 2

Вы хотите проверить ограничение.

Ограничения CHECK определяют действительные значения из логического выражения, которое не является на основе данных в другом столбце. Для Например, диапазон значений для зарплата может быть ограничена создание ограничения CHECK, которое позволяет использовать только данные, которые варьируются от От 15 000 до 100 000 долларов США. Эта запрещает внесение заработной платы вне диапазона регулярных окладов.

Вам нужно что-то вроде:

ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
    CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))

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

Ответ 3

Лично я бы назвал его tinyint и:

  • Либо: измените его на текст на клиенте, проверьте ограничение между 1 и 4
  • Или: используйте таблицу поиска с внешним ключом

Причины:

  • Для хранения текста потребуется в среднем 8 байтов, 1 байт для tinyint. За миллионы строк это будет иметь значение.

  • Как насчет сортировки? "Дейли" так же, как "ЕЖЕДНЕВНО"? Для такого сравнения требуются ресурсы.

  • Наконец, что, если вы хотите добавить "Biweekly" или "Hourly"? Это требует изменения схемы, когда вы можете просто добавить новые строки в таблицу поиска.

Ответ 4

Когда вы редактируете таблицу
Щелкните правой кнопкой мыши → Проверить ограничения → Добавить → Введите что-то вроде Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly') в поле выражения и хорошее имя ограничения в поле (Имя).
Вы закончили.