Мне нужна помощь в понимании работы внешних ключей и каскадов.Я понял теорию, но у меня возникли проблемы с применением их к примеру из реального мира.
Предположим, у меня есть следующие таблицы (и произвольное количество других таблиц, которые могут ссылаться на таблицу tags
):
CREATE TABLE tags (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) UNIQUE
) Engine=InnoDB;
CREATE TABLE news (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(63),
content TEXT,
INDEX (title)
) Engine=InnoDB;
Итак, я создаю дополнительную таблицу, чтобы обеспечить отношение «многие ко многим» между news
и tags
:
CREATE TABLE news_tags (
news_id INT UNSIGNED,
tags_id INT UNSIGNED,
FOREIGN KEY (news_id) REFERENCES news (id) ON DELETE ...,
FOREIGN KEY (tags_id) REFERENCES tags (id) ON DELETE ...
) Engine=InnoDB;
Мои требования к каскадам:
- Если я удаляю новости, все соответствующие записи в
news_tags
также должны быть удалены. - То же самое относится к таблице
x
, которая может быть добавлена позже с помощью x_tags
-Таблица. - Если я удаляю тег, все соответствующие записи в
news_tags
и в каждой последующей таблице x_tags
также должны быть удалены.
Боюсь, что явозможно, для этой цели, возможно, придется пересмотреть структуру моей таблицы, но это нормально, поскольку я только пытаюсь выяснить, как все это работает.
Любые ссылки на хорошие учебники, SQL-запросы или JPA-примеры приветствуются!