Ответ
В реляционных БД ключи — это фундаментальное понятие для обеспечения целостности данных и связей. Вот основные типы:
-
Первичный ключ (Primary Key, PK): Уникально идентифицирует каждую запись в таблице. Не может содержать
NULL. Часто это автоинкрементныйid.CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, -- Первичный ключ email VARCHAR(255) NOT NULL ); -
Внешний ключ (Foreign Key, FK): Создает ссылку на первичный ключ в другой таблице, обеспечивая ссылочную целостность. При удалении родительской записи можно задать поведение (
CASCADE,SET NULL,RESTRICT).CREATE TABLE orders ( id INT PRIMARY KEY, user_id INT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -
Уникальный ключ (Unique Key): Гарантирует, что все значения в столбце (или комбинации столбцов) уникальны. В отличие от PK, допускает один
NULL(зависит от СУБД).ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email); -
Составной (композитный) ключ: Первичный или уникальный ключ, состоящий из двух и более столбцов. Уникальность определяется комбинацией значений.
CREATE TABLE user_roles ( user_id INT, role_id INT, PRIMARY KEY (user_id, role_id), -- Составной первичный ключ FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (role_id) REFERENCES roles(id) ); -
Кандидатный ключ (Candidate Key): Это любой столбец или набор столбцов, которые могли бы быть выбраны в качестве первичного ключа, так как они уникальны и не содержат
NULL. Из кандидатных ключей выбирается один первичный. -
Суперключ (Super Key): Набор столбцов, который однозначно идентифицирует запись. Он может содержать избыточные столбцы. Любой первичный ключ является суперключом, но не наоборот.
На практике чаще всего работаю с PRIMARY KEY, FOREIGN KEY и UNIQUE. Составные ключи полезны для связующих таблиц many-to-many. Правильный выбор ключей напрямую влияет на производительность запросов и целостность данных.