Võtmed andmebaasisüsteemides

SQL PRIMARY KEY

Primary key (первичный ключ) — это столбец (или несколько), который уникально определяет каждую строку в таблице.

Главное:

  • Значения не повторяются.
  • Не может быть NULL (пустым).
  • В таблице может быть только один primary key.
  • Он может состоять из одного столбца или нескольких.

Простой пример:

CREATE TABLE Persons (
ID int NOT NULL,
FirstName varchar(255),
LastName varchar(255) NOT NULL,
PRIMARY KEY (ID)
);

Здесь ID — это primary key. Он уникален для каждого человека.


Пример с несколькими столбцами в ключе:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
CONSTRAINT PK_Person PRIMARY KEY (ID, LastName)
);

Здесь первичный ключ — это сразу два столбца: ID и LastName. Вместе они создают уникальную комбинацию.


Как добавить primary key после создания таблицы:

ALTER TABLE Persons
ADD PRIMARY KEY (ID);

С указанием имени:

ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);

Как удалить primary key:

В MySQL:

ALTER TABLE Persons
DROP PRIMARY KEY;

В SQL Server / Oracle:

ALTER TABLE Persons
DROP CONSTRAINT PK_Person;

ССЫЛКА НА ИНФОРМАЦИЮ

SQL FOREIGN KEY

Foreign key (внешний ключ) — это столбец, который ссылается на первичный ключ из другой таблицы. Он соединяет таблицы между собой.

📌 Главное:

  • Внешний ключ помогает поддерживать связи между таблицами.
  • Значение во внешнем ключе должно уже быть в основной (родительской) таблице.
  • Таблица, где находится foreign key — это дочерняя таблица.
  • Таблица, на которую он ссылается — это родительская таблица.

Пример:

Таблица Persons (родительская):

PersonIDLastNameFirstNameAge
1HansenOla30
2SvendsonTove23
3PettersenKari20

Таблица Orders (дочерняя):

OrderIDOrderNumberPersonID
1778953
2446783
3224562
4245621

Здесь столбец PersonID в таблице Orders — это внешний ключ, он ссылается на PersonID из таблицы Persons.


Как создать внешний ключ при создании таблицы:

CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

С именем ограничения:

CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);

Как добавить внешний ключ в уже существующую таблицу:

ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

С именем:

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

Как удалить внешний ключ:

В MySQL:

sqlКопироватьРедактироватьALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

В SQL Server / Oracle:

sqlКопироватьРедактироватьALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

ССЫЛКА НА ИНФОРМАЦИЮ

SQL UNIQUE KEY

UNIQUE — это ограничение (constraint), которое говорит:
в этом столбце все значения должны быть разные (никаких повторов).

Главное:

  • Значения не повторяются, но могут быть NULL (в отличие от primary key).
  • В одной таблице может быть много UNIQUE столбцов.
  • PRIMARY KEY тоже делает значения уникальными, но он один, а UNIQUE можно сколько угодно.

Пример:

sqlКопироватьРедактироватьCREATE TABLE Persons (
    ID int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

Здесь ID — уникальный: нельзя два раза вставить один и тот же ID.


Пример с именем ограничения и несколькими столбцами:

sqlКопироватьРедактироватьCREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID, LastName)
);

В этом случае сочетание ID и LastName должно быть уникальным.


Как добавить UNIQUE в уже существующую таблицу:

sqlКопироватьРедактироватьALTER TABLE Persons
ADD UNIQUE (ID);

С названием:

sqlКопироватьРедактироватьALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID, LastName);

Как удалить UNIQUE:

В MySQL:

sqlКопироватьРедактироватьALTER TABLE Persons
DROP INDEX UC_Person;

В SQL Server / Oracle:

sqlКопироватьРедактироватьALTER TABLE Persons
DROP CONSTRAINT UC_Person;

ССЫЛКА НА ИНФОРМАЦИЮ

SQL SIMPLE KEY

Simple key — это ключ из одного столбца, который уникально определяет строку в таблице.

Главное:

  • Это один единственный столбец.
  • Он не делится на части (то есть не составной).
  • Значения уникальные (не повторяются).

Пример:

CREATE TABLE Students (
StudentID int PRIMARY KEY,
FirstName varchar(255),
LastName varchar(255)
);

Здесь StudentID — это simple key, потому что:

  • он один;
  • он уникален;
  • его нельзя разделить на части (это не FirstName + LastName, а один столбец).

ССЫЛКА НА ИНФОРМАЦИЮ

SQL COMPOSITE KEY

Composite key (составной ключ) — это первичный ключ, который состоит из двух или более столбцов.
Каждый по отдельности может не быть уникальным, но вместе они создают уникальную комбинацию.

Главное:

  • Это несколько столбцов, объединённых в один ключ.
  • Вместе они гарантируют уникальность строки.
  • Ни один из этих столбцов не может быть NULL.
  • Используется, если одного столбца недостаточно для уникальности.

Пример:

CREATE TABLE student (
rollNumber INT,
name VARCHAR(30),
class VARCHAR(30),
section VARCHAR(1),
mobile VARCHAR(10),
PRIMARY KEY (rollNumber, mobile)
);

Здесь rollNumber и mobile — вместе составляют composite key.
Отдельно они могут повторяться, но их сочетание будет уникальным.


📥 Примеры вставки данных:

INSERT INTO student (rollNumber, name, class, section, mobile) 
VALUES (1, "AMAN", "FOURTH", "B", "9988774455");

INSERT INTO student (rollNumber, name, class, section, mobile)
VALUES (2, "JOHN", "FIRST", "A", "9988112233");

🧐 Когда использовать composite key?

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

📌 Вывод:

Composite key — это удобный способ сделать так, чтобы несколько столбцов вместе uniquely определяли каждую строку.
Очень полезно в таблицах со связями или когда у тебя много одинаковых значений в отдельных столбцах.

ССЫЛКА НА ИНФОРМАЦИЮ

SQL COMPOUND KEY

Compound key (составной внешний ключ) — это ключ из двух или более внешних ключей, которые пришли из других таблиц как первичные ключи.

Главное:

  • Состоит из двух и более первичных ключей из других таблиц.
  • Эти ключи выступают как внешние ключи в текущей таблице.
  • Вместе они уникально определяют строку.
  • Обычно используется в таблицах-связках (например, many-to-many).

Пример из школы:

Есть таблица Students:

CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(100)
);

Есть таблица Courses:

CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(100)
);

Теперь создадим таблицу Enrolment — она показывает, кто записался на какой курс:

CREATE TABLE Enrolment (
StudentID INT,
CourseID INT,
PRIMARY KEY (StudentID, CourseID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);

Здесь StudentID и CourseID — это compound key, потому что:

  • Оба ключа — это первичные ключи в других таблицах.
  • В таблице Enrolment они стали внешними ключами.
  • Вместе они уникально определяют каждую запись (то есть один студент — один курс).

ССЫЛКА НА ИНФОРМАЦИЮ

SQL SUPER KEY

Super key (суперключ) — это один столбец или группа столбцов, которые могут уникально определить строку в таблице.

Главное:

  • Может быть один столбец (например, Id), или несколько вместе (например, Id + Name).
  • Главное — чтобы комбинация гарантировала уникальность строки.
  • Внутри может быть лишняя информация (например, Name не нужен, но всё равно входит).
  • Любой primary key — это тоже super key, но не каждый super key — это primary key.

Пример:

Представим таблицу:

Id — это уникальный столбец, значит он уже super key. Но также и вот такие комбинации тоже будут super keys:

  • (Id)
  • (Id, Name)
  • (Id, Email)
  • (Id, Name, Email)

Почему? Потому что во всех них есть Id, который уникально определяет строку, а остальное — просто “в придачу”.


Вывод:

  • Super key — это любой набор столбцов, который может однозначно найти строку.
  • Таких ключей может быть много в одной таблице.
  • Он может содержать лишние столбцы, и это нормально.

ССЫЛКА НА ИНФОРМАЦИЮ

SQL CANDIDATE KEY

Candidate key (кандидат на ключ) — это один столбец или набор столбцов, которые уникально определяют строку в таблице и не содержат ничего лишнего.

📌 Главное:

  • Это “чистая версия” суперключа — только нужные столбцы.
  • Все значения в candidate key — уникальные и не NULL.
  • В таблице может быть несколько candidate keys.
  • Один из них потом выбирается как primary key.

👤 Пример:

Таблица:

Кандидаты на ключ:

  • Id — уникален → candidate key
  • Email — тоже уникален → candidate key
  • City — повторяется → не может быть candidate key

Чем отличается от super key?

  • Все candidate keys — это super keys.
  • Но не все super keys — это candidate keys.
  • Candidate key не содержит лишних столбцов — только то, что нужно для уникальности.

Вывод:

Candidate key — это один из возможных ключей, которые могут быть выбраны как primary key. Он:

  • уникален;
  • не содержит NULL;
  • не включает ненужных атрибутов;
  • и может быть не один в таблице.

ССЫЛКА НА ИНФОРМАЦИЮ

SQL ALTERNATE KEY

Alternate key (альтернативный ключ) — это любой candidate key, который не был выбран как primary key.

Главное:

  • Таблица может иметь несколько candidate keys.
  • Один из них становится primary key, остальные — alternate keys.
  • Alternate key всё равно гарантирует уникальность.
  • Он может содержать NULL, в отличие от primary key.
  • Для его создания используют UNIQUE.

Пример:

В таблице Customer Information есть такие уникальные столбцы:

  • Customer ID
  • PAN Number
  • Email Address

Все они — candidate keys, потому что могут уникально определить клиента.

Если primary key выбран как Customer ID, то:

PAN Number и Email Addressalternate keys


Как задать alternate key в SQL:

CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
PanNumber VARCHAR(20) UNIQUE,
EmailAddress VARCHAR(100) UNIQUE,
ShippingAddress TEXT,
ProductID INT
);

Здесь PanNumber и EmailAddress — alternate keys, потому что они имеют UNIQUE и не выбраны как primary.


📌 Сравнение: Primary Key vs Alternate Key

ПризнакPrimary KeyAlternate Key
УникальностьДаДа
NULL значенияНетМожно
НазначениеГлавный идентификаторАльтернативный вариант
Часть candidate keys?ДаДа
Сколько может быть?Только одинНесколько

Вывод:

Alternate key — это как “запасной вариант” для уникальности. Он:

  • тоже важен;
  • помогает защитить данные от повторов;
  • используется, если есть несколько уникальных полей, но только одно из них — primary.

ССЫЛКА НА ИНФОРМАЦИЮ