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

Представленная информация пригодится всем, кто планирует работать в базе данных SQL Language и T-SQL. Она подойдет как новичкам, так и уже опытным специалистам.

Определение

Первичный ключ – это специальное поле в таблице, которое однозначно идентифицирует каждую запись/строку в БД. Они содержат уникальные значения. NULL в столбце первичного ключа стоять не может.

Соответствующий ключ – это комбинация полей, однозначно определяющая запись. Если для таблицы БД был создан такой элемент в определенном поле, в нем не может быть несколько записей с одинаковыми значениями.

Первичный ключ может быть:

  • естественным – он существует в настоящем мире (паспортные данные, фамилии и имена и так далее);
  • суррогатным – не поддерживает существование в реальности (пример – порядковый номер).

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

Особенности

Создается первичный ключ с некоторыми ограничениями:

  1. Записи, которые относятся к соответствующему первичному идентификатору, должны быть обязательно уникальными. Это значит, что, если первичные ключи состоят из одного поля, все записи в нем – неповторимые. При содержании идентификатора сразу в нескольких «областях», комбинация задействованных полей уникальна. В отдельных частях допускаются повторения.
  2. Записи в полях, которые относятся к primary key, обязательно заполняются информацией. Пустыми они быть не могут. Соответствующее ограничение в PostgreSQL носит название not null.
  3. Для каждой таблички в базе данных можно создавать всего один первичный ключ.

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

Простой и составной ключи

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

Составной первичный ключ – идентификатор, состоящий из нескольких (два и более) атрибутов. Иногда он называется композитным (composite key).

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

Создание

Задумываясь над тем, как создать первичный (primary) ключ в базе данных, необходимо обратить внимание на несколько операторов:

  • create table;
  • alter table.

Оба варианта подойдут для непосредственного формирования уникального идентификатора в БД. Далее предстоит изучить каждый из них более подробно.

Create table

Первичный ключ может быть создан при непосредственном выполнении оператора create table, который поддерживает язык SQL. Он обладает следующим синтаксисом:

Ключи в SQL-таблицах

Или:

Ключи в SQL-таблицах

Здесь:

  • table_name – имя таблицы, которую хочется создать;
  • pk_col1, pk_col2, …, pk_col_n – определяют составляющие первичного ключа;
  • column1, column2 – столбцы, создаваемые в БД;
  • constraint_name – название первичного ключа.

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

Alter create

Операторы языка SQL позволяют создавать первичные ключи через alter create. Этот вариант применим для ситуации, в которой таблица уже существует. Primary key в ней формируется позже.

Синтаксис будет иметь следующий вид:

Ключи в SQL-таблицах

Здесь:

  • table_name – имя таблицы, в которой будет создаваться уникальный идентификатор;
  • constraint_name – название primary key;
  • column1, column2, …, column_n – составляющие уникального идентификатора.

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

Наглядные примеры

Операторы языка SQL позволяют создавать идентификаторы таблиц несколькими способами. Первый – это через create table. Вот наглядный пример применения соответствующей концепции на практике.

Ключи в SQL-таблицах

В нем создан первичный ключ для таблицы suppliers. Он носит название sources_pk. Включает в себя только один столбец – supplier_id.

Ключи в SQL-таблицах

Выше – альтернативный синтаксис. Он подойдет при создании обычного первичного ключа для таблицы через create table. Если он составной, то для формирования такого идентификатора подойдет исключительно первый вариант. В нем ключи определены в конце оператора create table. На практике это выглядит так:

Ключи в SQL-таблицах

Здесь происходит создание key с именем contacts_pk. Он включает в себя комбинацию сразу нескольких столбцов. А именно – last_name и first_name. Из-за этого каждое их сочетание должно являться уникальным для таблицы contacts.

Alter table – пример

А вот еще один наглядный пример. Он позволяет сделать keys через alter table.

Ключи в SQL-таблицах

В заданном примере уже есть готовая таблица под названием suppliers. Primary key здесь – это sources_pk. Он формируется для ранее созданной таблицы в SQL. Включает в себя столбец supplier_id. Это – вариант всего для идентификатора всего с одним полем.

Ключи в SQL-таблицах

А вот – пример, который позволяет сформировать рассматриваемый компонент с несколькими «областями». В нем первичным ключом в SQL выступает supplier_pk, который содержит комбинации столбцов supplier_id, а также supplier_name.

О связи между таблицами

Предложенные ранее примеры объясняют создание идентификатора для одной таблицы. Это редкое явление в базах данных. Обычно в них несколько таблиц, связанных между собой. Первостепенной задачей, которую поддерживают «ключевые идентификаторы» — это уникальная идентификация каждой строчки. Также primary key решает еще одну задачу – связывание нескольких заданных таблиц. Для этого используются:

  • первичные ключевые элементы;
  • внешний ключ SQL.

В одной таблице создается внешний ключ. Он будет ссылаться на поля другой имеющейся таблицы. Здесь действуют такие ограничения:

  • соответствующие поля присутствуют в той таблице, на которую ссылается внешний key;
  • ссылается внешний ключ обычно на primary key другой таблицы.

В качестве наглядного примера можно взять таблицу «Ученики» — pupils. Она будет выглядеть так:

Ключи в SQL-таблицах

Вторая табличка – «Успеваемость» — evaluations:

Ключи в SQL-таблицах

В качестве первичного ключа определяют поле «ФИО» из «Ученики». Связано это с тем, что оно есть как в первом «списке», так и во втором. Оценку ученику, которого не существует, в реальной жизни поставить не получится.

Первичный ключ – это «ФИО» в «Учениках». Внешним выступит такое же поле, но из «Успеваемость». Если в первом «списке» удалить слово или какие-нибудь данные, все его оценки удаляются из второго.

Также стоит обратить внимание на то, что первичный ключ будет автоматически создавать индекс. С их помощью удается быстрее получать доступ к строкам. Индексы – ключевые компоненты, которые накладывают ограничения на уникальность. Двух Петровых Петров Петровичей существовать не может.

Только в реальности такое имеет место. Поэтому приходится искать выходы из ситуации. Исправить положение помогают такие компоненты и «слова» как:

  • первичный ключ составного типа – в качестве него можно задействовать поля «ФИО», а также «Класс»;
  • суррогатный первичный идентификатор – в «Ученики» добавить поле «Номер ученика» (id int), а затем сделать его первичным;
  • добавление более уникального поля – в качестве примера допускается использование уникального номера зачетной книжки.

Запомнив все эти слова о primary в SQL, можно изучить несколько наглядных примеров реализации задачи. Они представлены здесь и тут во всех подробностях.

Удаление

Если первичный ключ больше не нужен, его можно удалить. Для этого используется оператор Atler Table:

Ключи в SQL-таблицах

В этом синтаксисе table_name – табличка, которую необходимо откорректировать.

Ключи в SQL-таблицах

Выше – наглядный пример того, как это выглядит в коде. Имя уникального идентификатора указывать не потребуется. Связано это с тем, что он у таблички может быть всего один. Система автоматически поймет, от чего необходимо избавиться.

Хотите знать про базы данных больше? Записывайтесь на курс!

Прокачать навыки работы с базами данных можно на курсах Otus.