Первичные и внешние ключи и ограничения
Объясняйте ключи, уникальность и ссылочную целостность так, как этого ожидают на собеседовании.
«Первичные и внешние ключи и ограничения» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Что такое SQL и зачем его спрашивают на собеседованиях
- Логический порядок выполнения запроса
- Первичные и внешние ключи и ограничения
- Чтение схемы в условиях стресса