Таблицы поиска (или таблицы кодов , как их называют некоторые люди) обычно представляют собой набор возможных значений, которые могут быть заданы для определенного столбца.
Например, предположим, что у нас есть справочная таблица party
(предназначенная для хранения информации о политических партиях), которая имеет два столбца:
party_code_idn
, который содержит сгенерированные системой числовые значения и (без значения бизнес-области ) работает как суррогат для реального ключа.party_code
, является реальным или «естественным» ключом таблицы, потому что он поддерживает значения, имеющие коннотации бизнес-домена .
И допустим, что в такой таблице сохраняются следующие данные:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
party_code
Колонна, которая сохраняет значения «Республиканский» и «демократическая», будучи реальным ключом таблицы, устанавливается с ограничением UNIQUE, но необязательно , добавил party_code_idn
и определил его как PK таблицы (хотя, говоря логически , party_code
может работать как ПЕРВИЧНЫЙ КЛЮЧ [PK]).
Вопрос
Каковы лучшие методы для указания на значения поиска из таблиц транзакций ? Должен ли я установить ссылки FOREIGN KEY (FK) либо (a) непосредственно на естественную и значимую ценность, либо (b) для суррогатных значений?
Вариант (а) , например,
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
имеет следующие свойства 1 :
- Читается для конечного пользователя (+)
- Легко импортировать-экспортировать через системы (+)
- Трудно изменить значение, так как оно требует модификации во всех ссылочных таблицах (-)
- Добавление нового значения не требует больших затрат (=)
Я думаю, что это почти как « передать по значению », провести аналогию из вызова функции на языке программирования приложений.
Вариант (б) , например,
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
имеет свойства ниже:
- Не читается для конечного пользователя (-)
- Сложно импортировать-экспортировать, так как нам нужно отменить ссылку на него (-)
- Легко изменить значения, так как мы храним ссылки только в таблицах транзакций (+)
- Добавление нового значения не требует больших затрат (=)
Это очень похоже на « передачу по ссылке », если сравнивать с вызовом функции на языке программирования приложения.
Импорт-экспорт также может быть выполнен по-другому, т. Е. Просто заполнив таблицу поиска снова, а затем заново заполнив суррогатный столбец. Надеюсь, я правильно понял, это то, что я только что услышал как возможность.
1. Обратите внимание , что +
, -
и =
указывают на преимущество этих свойств.
Вопрос
Очень важно: есть ли разница между таблицей поиска (или кодом ) и ссылкой на FK, если мы просто собираемся использовать последний подход? Я думаю, что они работают точно так же.