2009-03-23 2 views
14

У меня есть заказ, который имеет статус (который в коде является Enum). Вопрос в том, как это сохранить. Я мог бы:Сохранение перечислений в таблицах базы данных

  1. Сохраните строку в поле, а затем вернитесь к перечислению на поиск данных.
  2. Сохраните это как целое число, а затем вернитесь к перечислению на поиск данных.
  3. Создайте отдельную таблицу для значения перечисления и выполните объединение при извлечении данных.

Мысли?

+0

Приятной особенностью # 1 является то, что если БД не синхронизируется с приложением, по крайней мере, вы знаете, какое значение вы хотели бы сохранить, и было бы легко исправить БД, если строковое значение enum был изменен в .NET. – mbeckish

ответ

8

Если это фиксированный список (который, кажется, он есть, иначе вы не должны хранить его как перечисление), я бы не использовал # 1.

Основная причина использования # 3 над # 2 - это простота использования с утилитами для самообслуживания. Тем не менее, я бы выбрал вариант # 2: сохраните значение как целое число и сопоставьте его с перечислением на извлечение данных. Однако также создайте таблицу, представляющую тип перечисления, со значением PK и именем в качестве другого столбца. Таким образом, это просто, быстро и эффективно использовать с вашим кодом, но также легко получить логическое значение с помощью запросов самообслуживания и других целей, которые не используют ваш код доступа к данным.

+1

+1, я также установил FK, чтобы гарантировать, что целое число является допустимым значением перечисления. – LukeH

+0

Да, плюс, имея его как FK, помогает с возможностью обнаружения для инструментов запросов самообслуживания. –

0

hibernate по умолчанию использует целые числа. , если ваше перечисление не изменится очень часто, это неплохая идея, я думаю.

0

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

0

Я полагаю, это зависит от того, где будут извлекаться данные. С # 3 вы можете получить данные, не полагаясь на ваш интерфейс .NET. Но также возможно, чтобы таблица базы данных не синхронизировалась с кодом перечисления.

Вариант № 2, безусловно, самый эффективный способ сделать это для хранения ... но хранение дешево.

3

# 3 является наиболее «правильным» с точки зрения базы данных/нормализации. Фактически ваш статус является объектом домена, связанным с объектом заказа.

Смежные вопросы