I need some help at understanding how foreign keys and cascades work. I understood the theory but I’m having troubles to apply these to a real world example.
Let’s assume I’ve got the following tables (and an arbitrary number of other tables that may reference table 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;
So I create a further table to provide the many-to-many relation between news and 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;
My requirements to the cascades:
- If I delete a news, all corresponding entries in
news_tagsshould be removed as well. - Same applies for table
xthat may be added later withx_tags-table. - If I delete a tag, all corresponding entries in
news_tagsand in every further tablex_tagsshould be removed as well.
I’m afraid that I may have to revisit my table structure for this purpose, but that’s alright since I’m only trying to figure out how stuff works.
Any links to good tutorials, SQL-queries or JPA-examples appreciated!
You seem to be proposing something like this, which sounds reasonable to me: