Ключ - это набор столбцов, который можно использовать для однозначной идентификации каждой строки в таблице.
В каждой таблице есть хотя бы один ключ. Допустим, мы определили все возможные ключи для таблицы. Каждый из этих ключей является кандидатом.
Когда мы исследуем каждый из этих ключей, ключ может состоять не из столбцов (!), Из одного столбца или из нескольких столбцов, которые, если их рассматривать вместе, однозначно идентифицируют каждую строку. Термин составной ключ конкретно относится к ключу, который состоит из более чем одного столбца.
В SQL было решено, что один ключ должен быть выбран и обрабатываться «более равным», чем другие ключи таблицы. Этот ключ называется первичным ключом. В таблице также могут быть объявлены другие ключи, обычно они называются уникальными ограничениями.
(!) В SQL вам не разрешено объявлять ключ без столбцов - хотя иногда это может быть полезно (подумайте о таблице, в которой всегда должна быть только одна строка, где каждый столбец представляет информацию о конфигурации)
В качестве примера таблицы с несколькими ключами, все из которых являются составными. Представьте себе систему встреч, где клиент и консультант встречаются в комнате в определенное время:
CREATE TABLE Appointments (
ClientID int not null,
CounsellorID int not null,
RoomID int not null,
AppointmentTime datetime not null
)
Ключи-кандидаты для этой таблицы: {ClientID, AppointmentTime}, {CounsellorID, AppointmentTime} и {RoomID, AppointmentTime}. Любая из этих комбинаций столбцов может использоваться для однозначной идентификации строки в таблице, и все они являются составными ключами.
Какой из них мы выберем для объявления в качестве первичного ключа, будет зависеть (вероятно) от нашей собственной интерпретации основного «фокуса» системы. Мы в основном озабочены использованием Помещений, Клиентами или Консультантами? В любом случае мы выберем один и объявим его первичным ключом. Мы также надеемся объявить другие ключи как уникальные ограничения.
Или мы могли бы решить использовать суррогат и объявить столбец AppointmentID
, используя любые средства автоматической нумерации, доступные в базе данных. Тогда это может быть (несоставной) первичный ключ. Но мы все равно должны объявить другие ключи для таблицы.
person
Damien_The_Unbeliever
schedule
10.04.2011