Сохранение имен в таблицах базы данных

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

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

Мысли?

Ответы

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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