Отдельная таблица на случай суррогатного ключа? - PullRequest
2 голосов
/ 04 февраля 2010

Я читал горячие дебаты о составных и суррогатных ключах на Stack Overflow и других веб-сайтах, и хотя я был озадачен некоторыми из приведенных аргументов, я чувствую, что знаю о плюсах и минусах каждого.

Я чувствую соблазн пойти на суррогатные ключи, но теперь у меня есть другой вопрос. Позвольте мне объяснить мою ситуацию. У меня есть таблица, состоящая из 5 целых чисел, которые составляют уникальную комбинацию, и у меня есть несколько таблиц, ссылающихся на эту сущность. В настоящее время все таблицы включают полные 5 полей, и все операции JOIN должны указывать все 5 полей в качестве критерия соединения. Теперь я добавил суррогатный ключ. Но я должен удалить все 5 полей из всех таблиц в пользу суррогатного внешнего ключа, который ссылается на основную таблицу?

Я не уверен в этом, поскольку каждое из 5 полей в отдельности часто используется в качестве критерия выбора в других таблицах. У меня есть индексы, определенные для них в определенном естественном порядке, чтобы операции выбора выполнялись быстро. Если я перенесу все 5 полей в отдельную таблицу, я боюсь, что когда я захочу выбрать, скажем, первые три из них, мне придется определить JOIN и выбрать из этого, но индексы не будут определены на этом JOIN, так как он только что был сгенерирован, и я понесу потерю производительности.

Или я должен как-то определить VIEW для каждой таблицы, включая 5 ключей, и индекс для этого?

Я чувствую растерянность и, набрав все это, склоняюсь снова придерживаться естественных клавиш. Помощь

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Я бы предложил иметь одну таблицу с вашими 5 уникальными полями + суррогатный ПЕРВИЧНЫЙ КЛЮЧ. В этой таблице вы можете создавать индексы для каждого из полей + уникальное ограничение для 5 полей. Тогда вместо 5 полей в других таблицах у вас будет только 1 столбец.

1 голос
/ 04 февраля 2010

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

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