0Pricing
SQL Interview Prep · Урок

Первичные и внешние ключи и ограничения

Объясняйте ключи, уникальность и ссылочную целостность так, как этого ожидают на собеседовании.

«Первичные и внешние ключи и ограничения» — бесплатный урок SQL Interview Prep на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Interview Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Interview Prep содержит 4 уроков всего.

Почему ключи обсуждают почти всегда

После определения SQL собеседующие переходят к ключам и ограничениям. Их объединяет одна тема — целостность: правила, которые база данных обеспечивает, чтобы некорректные данные не попадали в неё.

Что такое первичный ключ

Первичный ключ однозначно идентифицирует каждую строку. Он всегда уникален и имеет значение NOT NULL, а в таблице может быть не более одного первичного ключа. Сформулируйте это чётко — это принесёт Вам баллы.

CREATE TABLE customers (
  id INTEGER PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  name VARCHAR(100)
);

Естественные и суррогатные ключи

Использовать реальные данные или сгенерированное число? Естественный ключ использует существующие уникальные данные, а суррогатный ключ представляет собой сгенерированный идентификатор. Большинство команд предпочитает суррогатные ключи: они стабильны.

Составные первичные ключи

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

CREATE TABLE enrollments (
  student_id INTEGER,
  course_id INTEGER,
  enrolled_on DATE,
  PRIMARY KEY (student_id, course_id)
);

Первичный ключ и уникальное ограничение

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

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  email VARCHAR(255) UNIQUE,
  username VARCHAR(50) UNIQUE
);

Что такое внешний ключ

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

CREATE TABLE orders (
  id INTEGER PRIMARY KEY,
  customer_id INTEGER REFERENCES customers(id),
  amount NUMERIC(10,2)
);

Ссылочные действия: ON DELETE / ON UPDATE

«Что произойдёт с заказами, если удалить клиента?» Это вопрос о ссылочном действии: RESTRICT блокирует операцию (это значение по умолчанию), CASCADE удаляет дочерние строки, а SET NULL очищает ключ.

CREATE TABLE order_items (
  id INTEGER PRIMARY KEY,
  order_id INTEGER REFERENCES orders(id) ON DELETE CASCADE
);

NOT NULL, CHECK и DEFAULT

Ещё три ограничения дополняют систему целостности: NOT NULL запрещает пропущенные значения, CHECK обеспечивает выполнение правила вроде stock >= 0, а DEFAULT подставляет запасное значение.

CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  price NUMERIC(10,2) NOT NULL DEFAULT 0,
  stock INTEGER CHECK (stock >= 0)
);

Практический пример: проектирование с учётом целостности

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

CREATE TABLE loans (
  id INTEGER PRIMARY KEY,
  book_id INTEGER NOT NULL REFERENCES books(id),
  member_id INTEGER NOT NULL REFERENCES members(id),
  due_date DATE NOT NULL,
  returned BOOLEAN DEFAULT false
);

Как говорить о целостности

Назовите три вида целостности, чтобы показать глубину понимания: целостность сущности обеспечивается первичными ключами, ссылочная целостность — внешними ключами, а доменная целостность — NOT NULL, CHECK и типами данных.

Добавление ограничений в существующую таблицу

Вас попросили добавить ограничения в существующую таблицу? Используйте ALTER TABLE ... ADD CONSTRAINT. Важно упомянуть одну тонкость: операция может завершиться ошибкой, если существующие строки уже нарушают новое правило.

ALTER TABLE orders
  ADD CONSTRAINT fk_orders_customer
  FOREIGN KEY (customer_id) REFERENCES customers(id);

Быстрая проверка

Отличите первичный ключ от уникального ограничения.

Итоги

Итак: первичный ключ уникален и имеет значение NOT NULL, в таблице он может быть только один; уникальное ограничение допускает NULL, и таких ограничений может быть несколько; внешний ключ обеспечивает ссылочную целостность.

Часто задаваемые вопросы

Урок «Первичные и внешние ключи и ограничения» бесплатный?

Да — полный текст урока «Первичные и внешние ключи и ограничения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Interview Prep, подпишись на CoddyKit PRO. Курс SQL Interview Prep содержит 4 уроков всего.

Чему я научусь в уроке «Первичные и внешние ключи и ограничения»?

Объясняйте ключи, уникальность и ссылочную целостность так, как этого ожидают на собеседовании. Ты практикуешь SQL Interview Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Interview Prep?

Предыдущий опыт не требуется. SQL Interview Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Первичные и внешние ключи и ограничения»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Interview Prep?

Да. Каждый урок SQL Interview Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Что такое SQL и зачем его спрашивают на собеседованиях
  2. Логический порядок выполнения запроса
  3. Первичные и внешние ключи и ограничения
  4. Чтение схемы в условиях стресса
← Назад к SQL Interview Prep