Введение

Ключ-кандидат, состоящий из двух или более атрибутов в базе данных

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

Преимущества

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

Хранение

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

Легче внедрять и использовать

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

Изменения требований

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

Сложность и хранение

Композитный ключ состоит из нескольких атрибутов, и на него будут ссылаться в нескольких таблицах как на внешний ключ. Это требует значительного места на диске, так как в качестве внешнего ключа хранятся несколько столбцов вместо одного возможного. Это усложняет схему данных, а запросы становятся более ресурсоемкими для ЦП, поскольку для каждого соединения СУБД необходимо сравнивать несколько атрибутов вместо одного, как это было бы в случае с единым естественным ключом.

Пример

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