Для «справочной таблицы» или нет? - PullRequest
3 голосов
/ 18 декабря 2008

Я сейчас создаю базу данных для проекта. Сейчас я спорю с собой, нужно ли мне создавать справочную таблицу, например, данные о гражданском состоянии, которая может содержать только фиксированные значения, такие как Single, Married, Separated, Widow / Widower. Я уверен, что в будущем не будет добавлено никаких других ценностей. Должен ли я поместить их в отдельную таблицу или просто жестко закодировать значения в программном коде?

Ответы [ 6 ]

7 голосов
/ 18 декабря 2008

Какая польза от жесткого их кодирования? Учитывая современную систему ORM, разве не так просто считывать эти значения из БД и использовать их? Если так, то я не вижу преимуществ жесткого кодирования, когда минусы:

  • Вам нужно будет повторно развернуть, если вы хотите добавить в список
  • Вам придется перераспределить, если вы хотите изменить написание
  • Возможно, вы хотите иметь больше, чем просто строку (возможно, ref-id или текст всплывающей подсказки и т. Д.)
  • Вам придется изменить тысячи записей, чтобы изменить текст, который вы сохранили, если вы не сохраните ref-id.

«Я не могу думать, что они изменятся» почти никогда не совпадает с «Они не могут измениться». Если они не могут изменить , как в True / False, тогда хорошо. Если вы не думаете, они изменятся, не так сильно.

3 голосов
/ 18 декабря 2008

нормализация говорит: справочная таблица

здравый смысл гласит: справочная таблица

понятие "гражданский союз" не является естественным законом, это вопрос гражданского права - и это может измениться.

Если вам нужно сделать что-то на основании статуса гражданского союза в программе, подход Эндрю Кеннана - хороший. В противном случае достаточно справочной таблицы

1 голос
/ 18 декабря 2008

В вашей таблице должен быть столбец для CivilStatus (int), который является ссылкой внешнего ключа на таблицу CivilStatuses, которая содержит все возможные гражданские статусы.

Даже если вы не ожидаете, что это изменится, я все равно запросил бы это из базы данных. Это облегчит другие вещи в будущем, такие как локализация / глобализация.

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

1 голос
/ 18 декабря 2008

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

Если перейти в базу данных, что дальше? Мужской женский? True / False? :)

В основном я использую Java, и все эти элементы обозначены перечислениями. С нашей базой данных MySQL мы также создаем тип столбца как enum. Хороший даже матч там.

НТН

0 голосов
/ 18 декабря 2008

Таблица поиска. Почему?

1) Обеспечивает целостность данных. По крайней мере, установите ограничение на столбец.

2) Локализация

3) Проблемы с запросами. Иногда базы данных чувствительны к регистру.

Select * from People where MarriageStatus = "single" or is it "Single", or is it "SINGLE"

Хм, я не знаю, что лучше поставить ToLower (MarriageStatus) = "single". Ой, я не знал, что обертывание функции вокруг столбца не позволяет ей использовать индекс:)

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

0 голосов
/ 18 декабря 2008

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

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

...