Почему таблица SQL имеет несколько первичных ключей? - PullRequest
3 голосов
/ 25 октября 2011

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

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

Ответы [ 4 ]

2 голосов
/ 25 октября 2011

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

Примечание. Ключ с более чем одним атрибутом не является несколькими ключами. Это всего лишь один ключ (называемый составной ключ ).

1 голос
/ 25 октября 2011

Это называется составной ключ. Если order_no является первичным ключом в таблице Order, а в таблице Order_Item существует уникальный порядковый номер в заказе, назначенном для каждой позиции заказа, т.е. все заказы имеют позиции, начинающиеся с порядкового номера 1, тогда первичный ключ для Order_Item будет order_no, item_sequence_no.

Сравните это с сгенерированным первичным ключом для Order_Item: вам все равно понадобится уникальный индекс для order_no, item_sequence_no. Если вы подумаете о запросах, то, возможно, обнаружите, что больше полагаетесь на составной ключ.

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

0 голосов
/ 25 октября 2011

Это зависит от таблицы и столбцов, используемых в качестве PK.

Если таблица «вопрос» является таблицей соединений, используемой в ассоциации «многие ко многим», то вы можете использовать составной первичный ключ из столбцов внешнего ключа (так как их комбинация будет уникальной в таблице соединений) и нетпотребуются дополнительные синтетические первичные ключи.

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

0 голосов
/ 25 октября 2011

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

Некоторые из преимуществ этого состоят в том, что если эти несколько значений однозначно идентифицируют запись, то PK обеспечивает уникальность, а в MS SQL Server по умолчанию этот PK также будет кластеризованным индексом в таблице.

...