Может ли транзакционная таблица SQL Server иметь суррогатный ключ в качестве первичного ключа, который имеет дочернюю таблицу? - PullRequest
0 голосов
/ 27 февраля 2019

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

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

Пожалуйста, дайте мне ваши входные данные о том, что является лучшим подходом для транзакционных реляционныхдизайн базы данных?

Я ценю вашу помощь в этом отношении.

Спасибо!Варуна

1 Ответ

0 голосов
/ 28 февраля 2019

В Microsoft SQL Server нет большой разницы между ключом, определенным как PRIMARY KEY, и ключом, определенным как УНИКАЛЬНОЕ ограничение.Поэтому нет особого преимущества делать первичный ключ суррогатом.

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

Если вы вставляете строки в дочернюю таблицу сразу после вставки в родительскую таблицу, то там вы можете получитьсуррогатные значения без каких-либо дополнительных операций.Если суррогат является столбцом IDENTITY, вы можете использовать функцию SCOPE_IDENTITY, чтобы получить последнее вставленное значение.Кроме того, вы также можете использовать предложение OUTPUT в операторе INSERT для извлечения вставленных значений - полезно, когда вы вставляете более одной строки.

...