Ограничения SQL: Первичные, внешние, уникальные ключи и ог... | Вопросы для собеседования | Skilio
Ограничения SQL: Первичные, внешние, уникальные ключи и ограничения проверки
Вопрос:

Объясните разницу между первичным ключом, внешним ключом, уникальным ключом и проверочным ограничением в SQL. Приведите пример для каждого ключа и ограничения, чтобы проиллюстрировать их использование в таблице базы данных.

Подсказки:

  1. Первичный ключ однозначно идентифицирует каждую строку в таблице и не может содержать NULL-значения.
  2. Внешний ключ устанавливает связь между двумя таблицами и гарантирует реляционную целостность данных.
  3. Уникальный ключ гарантирует, что все значения в столбце отличаются друг от друга, за исключением NULL-значений.
  4. Проверочное ограничение ограничивает значения, которые может содержать столбец, на основе заданного условия.

Выше ожиданий:

  1. Знает, что своставны ключи — это первичные ключи, состоящие более чем из одного столбца и что они реализуют
  2. Знает про каскадные действия
  3. Знает что, уникальные ограничения могут применяться к нескольким столбцам
  4. Упомянл, что проверочное ограничение может обеспечивать сложные условия с использованием выражений
  5. Понимает, что SQL поддерживает defferable (откладываемые) ограничения
Ответ:

Первичный ключ (primary key, PK) — это столбец или комбинация столбцов, используемые для уникальной идентификации каждой строки в таблице. Он не может содержать значений NULL, гарантируя, что каждая запись является уникальной. Первичный ключ часто создается при определении таблицы и имеет решающее значение для поддержания целостности данных.

Пример:

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50)
);

В этом примере EmployeeID является первичным ключом, который уникально идентифицирует каждого сотрудника.

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

Пример:

CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName VARCHAR(50)
);

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);

Здесь DepartmentID в таблице Employees является внешним ключом, который ссылается на DepartmentID в таблице Departments, поддерживая связь между сотрудниками и их соответствующими отделами.

Ограничение уникального ключа гарантирует, что все значения в столбце отличаются друг от друга. В отличие от первичного ключа, уникальный ключ может содержать значения NULL, но только одно значение NULL разрешено на столбец.

Пример:

CREATE TABLE Users (
    UserID INT PRIMARY KEY,
    Email VARCHAR(100) UNIQUE,
    Username VARCHAR(50) UNIQUE
);

В этой таблице как Email, так и Username определены как уникальные ключи, гарантируя, что у двух пользователей не может быть одинакового email или имени пользователя.

Ограничение CHECK ограничивает значения, которые может содержать столбец, на основе заданного условия. Оно используется для обеспечения того, что данные в столбце соответствуют определенным критериям перед добавлением в таблицу.

Пример:

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    Price DECIMAL(10, 2),
    CHECK (Price >= 0)
);

Ограничение CHECK в этом случае гарантирует, что цена продукта не может быть отрицательной, накладывая бизнес-правило, что цены должны быть нулевыми или положительными.

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

Пример:

CREATE TABLE OrderDetails (
    OrderID INT,
    ProductID INT,
    Quantity INT,
    PRIMARY KEY (OrderID, ProductID)
);

В этой таблице комбинация OrderID и ProductID служит составным ключом для уникальной идентификации каждой детали заказа.

Каскадные действия

Каскадные действия, такие как ON DELETE CASCADE, могут быть определены для внешних ключей, чтобы поддерживать целостность данных, автоматически удаляя или обновляя связанные записи.

Пример:

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON DELETE CASCADE
);

Здесь, если клиент удаляется из таблицы Customers, все его связанные заказы в таблице Orders также будут автоматически удалены.

Откладываемые (deferrable) ограничения

SQL поддерживает откладываемые ограничения, которые могут быть временно отключены во время транзакции, чтобы разрешить определенные операции, которые в противном случае нарушили бы ограничения. Это полезно для сложных транзакций, где ограничения должны проверяться в конце, а не на каждом шаге.

0
SQL Новичок Опубликовано
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.