В языке SQL `Primary Key` (первичный ключ) и `Foreign Key` (внешний ключ) являются важными концепциями, которые используются для обеспечения целостности данных и организации связей между таблицами в базе данных.
Primary Key (Первичный ключ)
Primary Key — это уникальный идентификатор для каждой записи в таблице. Он обладает следующими свойствами:
1. Уникальность: Значение первичного ключа должно быть уникальным для каждой записи в таблице. Никакие две записи не могут иметь одинаковое значение первичного ключа.
2. Не может быть NULL: Значение первичного ключа не может быть пустым (NULL).
3. Стабильность: Значение первичного ключа не должно изменяться со временем.
Пример:
```sql
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(50),
ContactName VARCHAR(50),
Address VARCHAR(100),
City VARCHAR(50),
PostalCode VARCHAR(20),
Country VARCHAR(50)
);
```
В этом примере `CustomerID` является первичным ключом, который уникально идентифицирует каждого клиента в таблице `Customers`.
Foreign Key (Внешний ключ)
Foreign Key — это поле (или набор полей) в одной таблице, которое ссылается на первичный ключ в другой таблице. Внешний ключ используется для установления и обеспечения связей между таблицами.
Свойства Foreign Key:
1. Ссылочная целостность: Внешний ключ гарантирует, что значение, которое он содержит, существует в первичном ключе связанной таблицы. Это предотвращает появление "висячих" ссылок.
2. Ограничения: Внешний ключ может быть использован для наложения ограничений на операции вставки, обновления и удаления данных. Например, можно запретить удаление записи в главной таблице, если на нее ссылаются записи в связанной таблице.
Пример:
```sql
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
```
В этом примере `CustomerID` в таблице `Orders` является внешним ключом, который ссылается на первичный ключ `CustomerID` в таблице `Customers`. Это устанавливает связь между заказами и клиентами, гарантируя, что каждый заказ связан с существующим клиентом.
Зачем они нужны?
1. Целостность данных: Первичные и внешние ключи помогают поддерживать целостность данных, предотвращая вставку некорректных или несуществующих ссылок.
2. Организация связей: Они позволяют организовать связи между таблицами, что упрощает управление и запросы к данным.
3. Упрощение запросов: Использование первичных и внешних ключей упрощает написание сложных запросов, так как база данных сама понимает, как связаны данные.
Пример использования в запросе:
```sql
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Orders
JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
```
Этот запрос объединяет таблицы `Orders` и `Customers` по полю `CustomerID`, используя связь, установленную через внешний ключ.
В целом, первичные и внешние ключи являются фундаментальными инструментами для организации и управления данными в реляционных базах данных.