【发布时间】:2014-03-05 15:45:26
【问题描述】:
我有一个关于多对多关系的简短问题。 这是我的表格:
+---------+----------------+
| film_id | title |
+---------+----------------+
| 1 | Apocalypse Now |
+---------+----------------+
+-------------+----------------------+
| category_id | name |
+-------------+----------------------+
| 1 | cool category |
+-------------+----------------------+
| 2 | not so cool category |
+-------------+----------------------+
+---------+-------------+
| film_id | category_id |
+---------+-------------+
| 1 | 1 |
+---------+-------------+
| 1 | 2 |
+---------+-------------+
如您所见,film- 和 category-table 中有 FK 在 film_category-table 中。
我想要什么:如果要删除category,那么film_category 中出现category_id 的所有条目也应该被删除。但不是相关的films!除此之外:这应该在删除film 时起作用,反之亦然! (这正是我的问题)
我的问题:我可以仅使用 FK 定义解决问题,还是必须在删除 film 或 category 之前手动删除 film_category 表中的所有条目?
【问题讨论】:
-
您可以通过对外键执行正常的
ON DELETE CASCADE引用触发操作来实现此目的。 -
当我这样做然后删除
category时,相关的film也会被删除。 -
你能发布你的表和外键定义吗,in the sql fiddle 我已经完成了,当一个类别被删除时,它只会删除 film_category 中具有该 category_id 的行,而电影表保持不变。跨度>
-
我的
film_category-table 与film_id+category_id有一个复合PK。这是我看到的唯一区别:/ -
这应该没什么区别。 Example on SQL Fiddle.