Имеет ли SQL Server 2005 эквивалент типа данных MySql ENUM?
Я работаю над проектом, и хочу сохранить в таблице некоторую легко перечислимую информацию. Тип данных MySql enum делает именно то, что я хочу: http://dev.mysql.com/doc/refman/5.0/en/enum.html. Есть ли эквивалент в SQL Server 2005?
Я знаю, что могу хранить возможные значения в таблице типов с помощью ключа, но мне бы лучше не ссылаться на него для описания. Наши стандарты базы данных не позволяют нам связываться с полями нецелого или уникального идентификатора, поэтому также сохраняются возможные ключи как символы.
Ответы
Ответ 1
Это работает для вас?
От http://blechie.com/wtilton/archive/2007/08/24/303.aspx
Создать таблицу...
MySQL
ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add')
DEFAULT 'open'
SQL Server:
ColumnName varchar(10)
CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add'))
DEFAULT 'open'
Ответ 2
Одной из характеристик типа данных MySQL ENUM является то, что в каждой строке хранится только числовой индекс в списке значений, а не сама строка. Поэтому он обычно более эффективен с точки зрения хранения. Также поведение по умолчанию при сортировке по столбцу ENUM состоит в сортировке по числовому индексу, поэтому по порядку элементов в ENUM.
Nikki9696 предлагает использовать столбец VARCHAR с ограничением CHECK. Это удовлетворяет ограничению значений в некоторый короткий список допустимых значений, но не имитирует эффективность хранения или специальный порядок сортировки.
Один из способов получить оба поведения - объявить столбец как целочисленный внешний ключ в таблицу поиска, в которой вы сохраняете каждую разрешенную строку.