2009-03-12 4 views
1

Возможно, это глупый вопрос, но когда вы должны сопоставить столбец с типом перечисления. Например, мы все знаем, что столбец «Пол», который представляет собой «М» или «F» в базе данных, может быть отображен в перечисление под названием «Пол». Поскольку, как правило, 2 пола :), мы можем быть уверены, что это перечисление не нуждается в обновлении. Однако, как насчет enum для бизнес-логики? Например, скажем, для региона, если у вас есть Enum, который представляет весь регион в вашей базе данных, всякий раз, когда вы вставляете другой регион в свою базу данных, это перечисление должно измениться, поэтому требуется еще одно продвижение. Это хорошая практика? Есть ли оптимальная практика?Когда вам следует сопоставить столбец с типом Enum в коде

Спасибо!

+0

В этой категории (серьезно) есть три пола. M, F & U - U может быть неизвестным, необъявленным, (менее seriosuly) Unsure, Undecided –

ответ

1

Это на самом деле сложный вопрос: когда вы используете перечисление, традиционно также иметь таблицу поиска в БД, как предлагает Рид. Но это ставит проблему синхронизации определений.

Что мы делаем, это генерировать таблицы из определений enum как часть наших скриптов build/deploy, чтобы гарантировать, что оба отражают один и тот же набор правовых значений.

У нас есть функции удобства, которые берут DataSet, возвращаемые из запроса БД, и сопоставляют столбцы идентификатора (вновь созданные) с значениями перечисления. Но мы делаем это сразу после получения результатов запроса. Поэтому мой совет должен был отображать их как можно скорее, желательно в вашем DAL.

+0

спасибо, что не дал мозговой мертвый ответ, не читая вопрос! – Herman

0

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

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

См. Любой текст по нормализации базы данных для подробностей и полных объяснений.

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