Что такое ссылочная целостность связи в базе данных

Ответ

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

Основные правила:

  1. Запрещает удаление записи, на которую ссылаются (или каскадное удаление)
  2. Запрещает вставку записи с несуществующим внешним ключом
  3. Может автоматически обновлять ссылки при изменении первичного ключа

Пример с ON DELETE CASCADE:

CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

При удалении пользователя из users все его заказы в orders автоматически удалятся.

Ответ 18+ 🔞

А, ссылочная целостность! Ну это, блядь, такая штука в базах данных, которая не даёт тебе наделать хуйни с этими самыми связями между таблицами. Представь, что у тебя есть таблица с пользователями и таблица с их заказами. Так вот, эта самая целостность стоит над тобой как злой дядька и не даёт тебе удалить юзера, на которого уже кто-то заказ повесил. Или впендюрить заказ на левого, несуществующего чувака. В общем, следит, чтобы всё было по понятиям, а не как попало.

Основные правила, если по-простому:

  1. Не тронь батьку. Нельзя просто взять и стереть запись, если на неё уже кто-то ссылается. Ну или можно, но тогда надо всех, кто на неё ссылался, за собой прихватить — это называется каскадное удаление. Жестко, но справедливо.
  2. Не выдумывай друзей. Нельзя создать запись (типа того же заказа) и приписать её какому-то левому, несуществующему пользователю. Чувак, ты чё, с бодуна что ли? Сначала создай пользователя, потом уже заказ ему лепи.
  3. Двигайся вместе со всеми. Если уж ты взялся менять ID главной записи (первичный ключ), то все, кто на неё ссылался, должны автоматически обновиться. Чтобы не получилось, что все твои заказы вдруг повисли в воздухе, ссылаясь на призрак. Доверия к такой базе будет, блядь, ноль.

Вот смотри, живой пример, чтобы вообще всё стало ясно, как божий день. Допустим, у нас есть таблица users с юзерами и orders с их заказами.

CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Видишь эту приписку ON DELETE CASCADE в конце? Это и есть та самая хитрая жопа. Она означает: «Эй, SQL, если кто-то возьмёт и удалит пользователя из таблицы users, ты не стой столбом, а возьми и автоматически выеби нахуй все его заказы из таблицы orders». Удобно, чёрт возьми! Не надо руками бегать и чистить хвосты. Сам всё сделает. Главное — понимать, что ты делаешь, а то так и бизнес-логику свою нахуй удалить недолго, ёпта.