Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: referential

Что такое ссылочная целостность и чем она обеспечивается?

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

Короткий ответ

Ссылочная целостность — это свойство реляционной базы данных, которое гарантирует, что ссылки между данными в разных таблицах всегда будут корректными. Это означает, что внешний ключ в одной таблице всегда будет указывать на существующую запись в другой таблице. Обеспечивается она с помощью ограничений внешнего ключа (Foreign Key Constraint), которые автоматически проверяются и поддерживаются самой СУБД.

Длинный ответ

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

Как работает ссылочная целостность?

  • Основная идея: Не может существовать "висячей" ссылки. Запись в дочерней таблице (например, orders) не может ссылаться на несуществующую запись в родительской таблице (например, users).

  • Обеспечивается ограничением внешнего ключа (FOREIGN KEY):

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

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

Что обеспечивает FOREIGN KEY?

  1. Запрет на вставку некорректных данных:

    • Невозможно вставить запись в дочернюю таблицу, если значение внешнего ключа не существует в родительской таблице.

    • Пример: Нельзя создать заказ для несуществующего пользователя.

  2. Обработка обновлений и удалений (ON DELETE / ON UPDATE):

    • Ограничение внешнего ключа позволяет определить, что произойдет с дочерними записями при изменении или удалении родительской.

    • Основные действия:

      • RESTRICT / NO ACTION: Запретить удаление/изменение родителя, если на него есть ссылки.

      • CASCADE: Каскадное удаление/изменение. Если удаляется пользователь, удаляются все его заказы.

      • SET NULL: При удалении родителя внешний ключ в дочерних записях устанавливается в NULL.

      • SET DEFAULT: Устанавливается в значение по умолчанию.

Пример создания таблицы с внешним ключом:

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL,
    amount DECIMAL,
    -- Ограничение внешнего ключа
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Вывод: Ссылочная целостность, обеспечиваемая ограничениями FOREIGN KEY, — это краеугольный камень надежных реляционных баз данных. Она перекладывает ответственность за проверку корректности связей с приложения на СУБД, что предотвращает появление несогласованных данных и упрощает логику приложения.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

Ключевые слова

#referential

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.