
Primary Key (Первичный ключ)
Первичный ключ в СУБД — это один столбец или комбинация столбцов в таблице, которые однозначно идентифицируют каждую запись в этой таблице. Таблица может иметь только один первичный ключ, который должен иметь уникальные значения без повторений во всех строках.
Особенности первичного ключа
Основываясь на моих наблюдениях, вот важные особенности первичного ключа:
- Первичный ключ реализует целостность объекта таблицы.
- В таблице можно сохранить только один основной объект.
- Первичный ключ содержит один или несколько столбцов таблицы.
- Столбцы определены как не нулевые.
Пример:
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
Пример используя ALTER TABLE:
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
Следующий пример описывает, что есть таблица с именем student. Она содержит пять атрибутов: 1) StudID, 2) Roll No., 3) First Name, 4) Last Name и 5) Email.
Атрибут Roll No никогда не может содержать повторяющееся или нулевое значение. Это связано с тем, что каждый студент, зачисленный в университет, может иметь уникальный номер. Вы можете легко идентифицировать каждую строку таблицы по номеру учащегося. Таким образом, он считается первичным ключом.

Foreign Key (Внешний ключ)
Внешние ключи связывают две таблицы, требуя, чтобы каждое значение в одном столбце или столбце соответствовало первичному ключу в другой ссылочной таблице. Они обеспечивают связи между связанной, но не идентичной информацией.
Пример:
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

Обрати внимание, что столбец “PersonID” в таблице “Orders” ссылается на столбец “PersonID” в таблице “Persons”.
Столбец “PersonID” в таблице “Persons” является PRIMARY KEY (первичным ключом) этой таблицы.
Столбец “PersonID” в таблице “Orders” является FOREIGN KEY (внешним ключом) в этой таблице.
Ограничение FOREIGN KEY предотвращает вставку недопустимых данных в столбец внешнего ключа, потому что значение должно присутствовать в родительской таблице.
Unique Key (Уникальный ключ)
Уникальный ключ, состоящий из одного или нескольких столбцов, уникально идентифицирует каждую строку в таблице, поэтому все значения ключа должны быть уникальными. В отличие от первичного ключа, уникальный ключ может включать одно нулевое значение, тогда как первичный ключ не допускает нулевых значений.
Особенности уникального ключа
Здесь я опишу важные особенности уникального ключа:
- В таблице можно определить более одного уникального ключа.
- По умолчанию уникальные ключи находятся в некластеризованных уникальных индексах.
- Он состоит из одного или нескольких столбцов таблицы.
- Столбец таблицы может иметь значение NULL, но предпочтительно, чтобы в каждом столбце было только одно значение NULL.
- На ограничение уникальности можно легко ссылаться с помощью ограничения внешнего ключа.
Пример:
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
Рассмотрим ту же таблицу студентов со следующими атрибутами: 1) StudID, 2) Roll No., 3) First Name, 4) Last Name и 5) Email.
Идентификатор Stud может иметь уникальное ограничение, при котором записи в столбце Stud ID могут быть уникальными, поскольку каждый студент в университете должен иметь уникальный идентификационный номер. Если студент меняет университет, у него не будет студенческого билета. Запись может иметь нулевое значение, поскольку в ограничении уникального ключа допускается только одно нулевое значение.

Simple Key (Простой ключ)
Простой ключ (Simple Key) в SQL — это ключ, состоящий из одного поля, которое однозначно идентифицирует каждую запись в таблице.
Основные особенности простого ключа
- Одно поле: содержит только один столбец.
- Уникальность: значения в этом столбце не повторяются.
- NOT NULL: не допускает пустых (NULL) значений.
- Простота: не может быть разделён на более мелкие компоненты.
Простой ключ часто используется в качестве первичного ключа (PRIMARY KEY), обеспечивая уникальную идентификацию каждой строки в таблице.
Пример:
Например, studentId
, который однозначно идентифицирует конкретного студента, является одним полем и, следовательно, представляет собой простой ключ.
Два студента не могут иметь одинаковый номер студента.

Composite Key (Составной ключ)
Составной ключ имеет два или более атрибута, позволяющих однозначно распознавать конкретную запись. Возможно, что каждый столбец сам по себе не уникален в базе данных. Однако при объединении с другим столбцом или столбцами комбинация составных ключей становится уникальной. Назначение составного ключа в базе данных — уникально идентифицировать каждую запись в таблице.
Пример:
В этом примере мы создали составной ключ как комбинацию двух столбцов — rollNumber
и mobile
, потому что все строки таблицы student
могут быть однозначно идентифицированы с помощью этого составного ключа.
CREATE TABLE student
(rollNumber INT,
name VARCHAR(30),
class VARCHAR(30),
section VARCHAR(1),
mobile VARCHAR(10),
PRIMARY KEY (rollNumber, mobile));
В этом примере OrderNo и ProductID не могут быть первичным ключом, поскольку они не идентифицируют запись однозначно. Однако можно использовать составной ключ идентификатора заказа и идентификатора продукта, поскольку он уникально идентифицирует каждую запись.

Compound Key (Составной внешний ключ)
Compound key похож на composite key тем, что для создания уникального значения требуется два или более поля. Однако compound key создаётся в том случае, когда два или более первичных ключа из разных таблиц присутствуют как внешние ключи в одной таблице. Эти внешние ключи используются вместе, чтобы однозначно идентифицировать каждую запись.
Compound key всегда состоит из двух или более первичных ключей из других таблиц. В своих собственных таблицах эти ключи однозначно идентифицируют данные, но в таблице, где используется compound key, необходимы оба ключа вместе, чтобы уникально идентифицировать данные.
Пример:
Например, в базе данных школы может быть таблица студентов, где student number — это первичный ключ. Может быть и вторая таблица для каждого курса с первичным ключом course number.
Классные журналы могут храниться в таблице, называемой enrolment (зачисление), где уникальным идентификатором записи будет комбинация student id и course id.

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

Candidate Key (Кандидатный ключ)
КЛЮЧ КАНДИДАТА в SQL — это набор атрибутов, которые однозначно идентифицируют кортежи в таблице. Кандидатный ключ — это суперключ без повторяющихся атрибутов. Первичный ключ должен быть выбран из возможных ключей. Каждая таблица должна иметь хотя бы один потенциальный ключ. Таблица может иметь несколько потенциальных ключей, но только один первичный ключ.
Свойства ключа-кандидата:
- Он должен содержать уникальные значения
- Ключ-кандидат в SQL может иметь несколько атрибутов.
- Не должно содержать нулевых значений
- Он должен содержать минимальное количество полей для обеспечения уникальности.
- Уникально идентифицировать каждую запись в таблице
Пример:
Пример ключа-кандидата: в данной таблице идентификатор студента, номер записи и адрес электронной почты являются ключами-кандидатами, которые помогают нам однозначно идентифицировать запись студента в таблице.


Alternate Key (Альтернативный ключ)
Альтернативный ключ – это столбец или группа столбцов в таблице, которые однозначно идентифицируют каждую строку в этой таблице. Таблица может иметь несколько вариантов первичного ключа, но только один может быть установлен в качестве первичного ключа. Все ключи, которые не являются первичными, называются альтернативными ключами.
Пример:
В этой таблице StudID, Roll No, Email могут стать первичным ключом. Но поскольку StudID является первичным ключом, альтернативным ключом становится Roll No, Email.

Использованные источники
- https://www.astera.com/ru/type/blog/primary-key-vs-foreign-key
- https://www.w3schools.com/sql/sql_primarykey.asp
- https://www.w3schools.com/sql/sql_foreignkey.asp
- https://www.guru99.com/ru/difference-between-primary-key-and-unique-key.html
- https://www.guru99.com/ru/dbms-keys.html
- https://www.bbc.co.uk/bitesize/guides/z4wf8xs/revision/4
- http://rdbms.opengrass.net/2_Database%20Design/2.1_TermsOfReference/2.1.2_Keys.html
- https://www.geeksforgeeks.org/composite-key-in-sql/