Каков оптимальный формат таблицы для значений перечисления? - PullRequest
0 голосов
/ 30 октября 2019

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

Существует два основных параметра:

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

Какой путь лучше, особенно в отношении производительности? База данных, о которой идет речь, получает большое количество INSERT и DELETE и относительно меньше операций чтения.

1 Ответ

1 голос
/ 30 октября 2019

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

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

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

Существует также преимущество в виде места для одной таблицы. Таблицы в SQL хранятся на страницах - и многие справочные таблицы будут меньше, чем одна страница. Это оставляет много неиспользованного пространства. Хранение их в одном столе «сжимает» их, устраняя это пространство. Однако в современном мире это редко является реальным соображением.

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

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