Primary Key (первичный ключ)
Primary key — это уникальный идентификатор каждой записи в таблице.
В одной таблице может быть только один первичный ключ.
Он не может содержать NULL и должен быть уникальным.
Пример (таблица «Студенты»):

Код для создания таблицы:
CREATE TABLE Uliopilased (
ID_uliopilane INT PRIMARY KEY,
Nimi TEXT,
Grupp TEXT
);
INSERT INTO Uliopilased (ID_uliopilane, Nimi, Grupp)
VALUES (1, 'Eldar', 'A1'),
(2, 'Nikita', 'B1');
SELECT * FROM Uliopilased;
Здесь ID_студента — это Primary Key.
Разница: Primary key отличается тем, что он — главный уникальный идентификатор таблицы.
Foreign Key (внешний ключ)
Foreign key — это ссылка на первичный ключ другой таблицы.
Он создаёт связь между таблицами (например, между студентами и их оценками).
Пример:

Код для создания таблицы:
CREATE TABLE Hinded (
ID_hinne INT PRIMARY KEY,
Hinne INT,
ID_uliopilane INT,
FOREIGN KEY (ID_uliopilane) REFERENCES Uliopilased(ID_uliopilane)
);
INSERT INTO Hinded (ID_hinne, Hinne, ID_uliopilane)
VALUES (1, 5, 1),
(2, 4, 2);
SELECT * FROM Hinded;;
Здесь ID_студента — это Foreign Key, который ссылается на ID_студента из таблицы Студенты.
Разница: Foreign key обеспечивает связь между таблицами, в отличие от Primary key, который идентифицирует запись внутри одной таблицы.
Unique Key (уникальный ключ)
Unique key обеспечивает уникальность значения в столбце, но в отличие от Primary key, его может быть несколько в одной таблице.
Он может содержать NULL.
Пример:

Код для создания таблицы:
CREATE TABLE Kontaktid (
ID INT PRIMARY KEY,
Email VARCHAR(100) UNIQUE,
Telefon VARCHAR(20)
);
INSERT INTO Kontaktid (ID, Email, Telefon)
VALUES (1, 'khabib@mail.com', '555111'),
(2, 'nikitos@mail.com', '555222');
SELECT * FROM Kontaktid;
Здесь Email может быть Unique Key, чтобы адреса не повторялись.
Разница: Unique key допускает несколько NULL и может быть не основным ключом.
Simple Key (простой ключ)
Простой ключ состоит из одного поля (столбца), которое может уникально идентифицировать запись.
Пример:

Код для создания таблицы:
CREATE TABLE Uliopilased_Simple (
ID_uliopilane INT PRIMARY KEY,
Nimi VARCHAR(50),
Grupp VARCHAR(10)
);
INSERT INTO Uliopilased_Simple (ID_uliopilane, Nimi, Grupp)
VALUES (
1, 'Nikita', 'C2'),
(2, 'Eldar', 'A1'
);
SELECT * FROM Uliopilased_Simple;
Разница: Если ключ состоит только из одного атрибута, он простой. Если из нескольких — составной (composite/compound).
Composite Key (составной ключ)
Composite key — это ключ, который состоит из двух или более столбцов, вместе создающих уникальность записи.
Пример (таблица оценок):

Код для создания таблицы
CREATE TABLE Hinded2 (
ID_aine INT,
ID_uliopilane INT,
Hinne INT,
PRIMARY KEY (ID_aine, ID_uliopilane)
);
INSERT INTO Hinded2 (ID_aine, ID_uliopilane, Hinne)
VALUES
(1, 1, 5),
(1, 2, 4);
SELECT * FROM Hinded2;
Уникальность создаётся сочетанием ID_предмета + ID_студента.
Compound Key (составной/комбинированный ключ)
Compound key похож на composite key — это ключ, который состоит из нескольких полей, но не обязательно все поля уникальны по отдельности.
Иногда оба термина считаются синонимами.
Пример:

Код для создания таблицы:
CREATE TABLE Inimesed_Compound (
Nimi VARCHAR(50),
Perekonnanimi VARCHAR(50),
Sunnikuupaev DATE,
PRIMARY KEY (Nimi, Perekonnanimi, Sunnikuupaev)
);
INSERT INTO Inimesed_Compound (Nimi, Perekonnanimi, Sunnikuupaev)
VALUES (
'Nikita', 'Orlenko', '2008-10-10'),
('Eldar', 'Petrov', '2002-08-10'
);
SELECT * FROM Inimesed_Compound;
Superkey (суперключ)
Superkey — это любой набор атрибутов, который однозначно идентифицирует запись.
Каждый Primary key — это Superkey, но не каждый Superkey — это Primary key.
Пример:

Код для создания таблицы:
CREATE TABLE Inimesed (
ID INT PRIMARY KEY,
Email VARCHAR(100) UNIQUE,
Telefon VARCHAR(20) UNIQUE
);
INSERT INTO Inimesed (ID, Email, Telefon)
VALUES(
1, 'nikitos@mail.com', '555111'),
(2, 'eldar@mail.com', '555222'
);
SELECT * FROM Inimesed;
ID, Email, Телефон — всё это Superkey, так как каждое из этих полей по отдельности делает запись уникальной.
Candidate Key (кандидатный ключ)
Candidate key — это потенциальный ключ, который может стать первичным.
Из всех кандидатных ключей выбирают один — он становится Primary key.
Пример:

Код для создания таблицы:
CREATE TABLE Kandidaadid (
ID INT PRIMARY KEY,
Email VARCHAR(100) UNIQUE,
Telefon VARCHAR(20) UNIQUE
);
INSERT INTO Kandidaadid (ID, Email, Telefon)
VALUES (
1, 'nikitos@mail.com', '555111'
);
SELECT * FROM Kandidaadid
Кандидатные ключи: ID, Email, Телефон.
Выбранный Primary key: ID.
Alternate Key (альтернативный ключ)
Alternate key — это кандидатный ключ, который не был выбран как первичный.
Пример:

Код для создания таблицы:
CREATE TABLE Alternatiivsed (
ID INT PRIMARY KEY,
Email VARCHAR(100) UNIQUE,
Telefon VARCHAR(20) UNIQUE
);
INSERT INTO Alternatiivsed (ID, Email, Telefon)
VALUES (
1, 'nikitos@mail.com', '555111')
SELECT * FROM Alternatiivsed;
Источники:
Конспекты занятий по теме «Andmebaasid»
Учебные материалы по базам данных
https://www.geeksforgeeks.org/types-of-keys-in-database

