Должен ли я хранить ID / значения Enum в базе данных или перечисление C #? - PullRequest
10 голосов
/ 26 апреля 2009

Допустим, в таблицах моей базы данных есть такие столбцы, как UserType, SalesType и т. Д.

Нужно ли иметь таблицы базы данных с UserTypeID, userTypeName или мне просто создать перечисление C #?

Ответы [ 4 ]

12 голосов
/ 26 апреля 2009

Что не так с обоими? Если значения определены или изменяются пользователем, определенно enum не подойдет.

Если значения строго не меняются (например, пол), вы можете иметь их как enums для удобства ссылок в приложении, а также в БД в виде отдельной таблицы для принудительного применения внешних ключей и в качестве ссылки.

7 голосов
/ 26 апреля 2009

Это зависит. Я перечислил несколько плюсов и минусов для каждого подхода ниже. В общем, я настоятельно предпочитаю перечисления, если приложению необходимо использовать значение для принятия решений. Как упоминал Мехрад, вы можете использовать оба подхода, но это требует дополнительных усилий для синхронизации списков.

Таблицы поиска:

  • Ссылочная целостность может быть обеспечена через внешние ключи
  • Легко добавлять или удалять существующие значения
  • Таблица может быть расширена для добавления дополнительных полей (активный флаг и т. Д.)
  • Требуется дополнительный класс при использовании бизнес-объектов
  • Простота в использовании значения и описания в отчетах

Enum:

  • Проверка ограничения может обеспечить целостность данных
  • Лучший выбор, если код должен использовать значение для ветвления (например, x == SalesType.Web против x == "WEB")
  • Требуется выпуск программного обеспечения для изменения значений
  • Невозможно отобразить описание в запросах SQL (без CASE)
  • Enum может не подходить для отображения в пользовательском интерфейсе (есть обходные пути)
0 голосов
/ 26 апреля 2009

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

Конечно, вам нужно иметь C # перечисления, только если ваш код делает что-то конкретное в зависимости от значения поля Type.

0 голосов
/ 26 апреля 2009

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

...