Постоянные перечисления в таблицах базы данных - PullRequest
14 голосов
/ 23 марта 2009

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

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

Мысли

Ответы [ 5 ]

8 голосов
/ 23 марта 2009

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

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

3 голосов
/ 23 марта 2009

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

0 голосов
/ 23 марта 2009

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

0 голосов
/ 23 марта 2009

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

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

0 голосов
/ 23 марта 2009

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

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