Я настраиваю базу данных mysql с постами и тегами, которая выглядит следующим образом:
posts
+-------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
[...]
tags
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| tag | varchar(255) | NO | UNI | NULL | |
+-------+--------------+------+-----+---------+----------------+
post_tag_map
+------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| post_id | int(11) | NO | PRI | NULL | |
| tag_id | int(11) | NO | PRI | NULL | |
+------------+---------+------+-----+---------+-------+
Теги будут разделены между несколькими сообщениями; «красный» может использоваться постами 5 и 10.
Мой вопрос: как предотвратить удаление тега, если он используется более чем одним сообщением, и удалить его, если это не так?
Примечание: Я использую Foreign Keys, которые, как я думал, решат эту проблему, но, похоже, не работают:
CREATE TABLE `post_tag_map` (
`post_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL,
PRIMARY KEY (`post_id`,`tag_id`),
FOREIGN KEY (`post_id`) REFERENCES posts(`id`),
FOREIGN KEY (`tag_id`) REFERENCES tag(`id`)
)