составной первичный ключ с практическим подходом - PullRequest
0 голосов
/ 09 мая 2018

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

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

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Типичным вариантом использования составного первичного ключа является таблица соединения / ассоциации.Рассмотрим заказы и продукты.В одном заказе может быть много товаров.Один товар может быть во многих заказах.Таблица orderProducts может быть определена как:

create table orderProducts (
    orderId int not null references orders(orderId),
    productId int not null references products(productId),
    quantity int,
    . . .
);

Имеет смысл объявить (orderId, productId) в качестве составного первичного ключа.Это наложило бы ограничение на то, что любой данный заказ имеет данный продукт только один раз.

Тем не менее, я бы обычно использовал синтетический ключ (orderProductId) и просто объявил бы комбинацию как unique.

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

У составных первичных ключей есть свои недостатки по сравнению с identity клавишами:

  • Идентификационные ключи отслеживаютпорядок вставок.
  • Ключи идентификации обычно составляют всего 4 байта.
  • Ссылки на внешние ключи состоят только из одного столбца.
  • По умолчанию кластеры SQL Server на первичных ключах.Это налагает порядок и может привести к фрагментации (хотя это сомнительно для этого примера).
0 голосов
/ 09 мая 2018

Допустим, у меня есть таблица автомобилей. Он включает в себя модель и марку автомобилей. Я не хочу вставлять одну и ту же машину в мой стол, но есть автомобили той же марки и автомобили той же модели (предположим, что и Ford, и Toyota производят автомобиль под названием BlergWagon).

Я мог бы реализовать уникальность make / model с помощью составного ключа, который включает оба значения. Уникальный ключ на Just Make не позволил бы мне добавить более 1 Toyota, а уникальный ключ на Just Model не позволил бы мне ввести более 1 BlergWagon.

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

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

...