String или Enum - PullRequest
       16

String или Enum

2 голосов
/ 16 июня 2009

Какая ситуация лучше?

Предполагается, что свыше 300 возможных значений в том, что по существу будет таблицей пар ключ / значение, где рассматриваемый столбец является ключом:

Enum или Char / Varchar

Мне просто интересно, имел ли кто-нибудь дело со столбцом Enum с таким количеством возможных значений и какими могут быть подводные камни.

EDIT:

Ключи предопределены.

Таблица элементов:

идентификатор, имя, ...

Таблица атрибутов:

id, item_id, ключ, значение

Ответы [ 3 ]

3 голосов
/ 16 июня 2009

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

Особенно учитывая это утверждение из вашего вопроса:

в том, что по существу будет таблицей пар ключ / значение, где рассматриваемый столбец является ключом

Так почему бы просто не сделать это таблицей пар ключ / значение?

2 голосов
/ 16 июня 2009

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

1 голос
/ 16 июня 2009

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

FrontLeftBottom
FrontRightBottom
FrontRightTop
FrontLeftTop
RearLeftBottom
[...]

Но вы также можете разложить его только на шесть значений и объединить их, используя перечисление битового флага.

Front
Rear
Left
Right
Top
Bottom

Если пространство значений не является фиксированным - то есть вполне возможно, что будут добавлены новые значения - строка или новый детектированный тип - путь.

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