Какой тип данных вы используете для перечислений в SQL Server - PullRequest
3 голосов
/ 16 декабря 2008

Когда мы сериализуем перечисление из C # в SQL Server, мы используем тип данных NCHAR (3) с мнемоническими значениями для каждого значения перечисления. Таким образом, мы можем легко прочитать SELECT qry.

Как сохранить enum в вашей базе данных?

Какой тип данных вы используете?

Ответы [ 7 ]

6 голосов
/ 16 декабря 2008

Лучшим способом было бы хранить как int. Таким образом, вы можете десериализовать / привести из базы данных обратно к правильному значению перечисления.

Если перечисление может быть изменено в будущем, используйте явные значения, например,

public enum ActionType
{
  Insert = 1,
  Update = 2,
  Delete = 3
}

Практические особенности хранения в виде мнемоники должны вызывать конфликты в зависимости от алгоритма генерации мнемоники?

3 голосов
/ 16 декабря 2008

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

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

3 голосов
/ 16 декабря 2008

Я использую отдельную таблицу справочных данных с идентификатором и описанием для каждого перечисления. Вы можете сгруппировать их все в одну таблицу с ID, Type & Description, но я обнаружил, что вам часто приходится расширять эти таблицы с течением времени, и если вы сгруппируете все справочные данные в одну таблицу, это может усложнить жизнь в долгосрочной перспективе. бежать.

1 голос
/ 16 декабря 2008

Я храню их как целые числа. это действительно мило бросать их друг к другу (int) enum и (enum) int :) также мой другой любимый это dropdownlist.datasource = Enum.GetNames (typeof (EnumType));

Это слишком примитивно, потому что вы говорите о многих сложных вещах

0 голосов
/ 07 августа 2017

Это не так. Есть неопределенный эквивалент:

Жанр VARCHAR (10) ПРОВЕРКА NOT NULL (Жанр IN («Мужской», «Женский», «Другие»))

0 голосов
/ 01 августа 2012

Вот мой ответ в другой теме.

На мой взгляд, лучший способ - это использовать справочную таблицу с int, как предложено выше, но сочетать ее с генерацией кода, чтобы соответствовать принципу СУХОЙ (не повторять себя).

Вот ссылка на пример генерации кода.

0 голосов
/ 16 декабря 2008

nchar (3) для мнемоники?

Как указал Мартин, используйте справочную таблицу с INT в качестве PK, идентификатором VARCHAR в качестве UK и описанием NVARCHAR.

Вы можете написать хранимую процедуру, чтобы записать в таблицу значения как enum C # или как public cons C #.

Таким образом, значения задокументированы как в базе данных, так и в исходном коде C #.

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