2

我正在尝试为孩子和父母创建一个数据库。表的样子。

ChildTable : 子 ID (pk) | 父 ID (fk) | 姓名

ParentTable :父 ID (pk) | 姓名

外键 ParentTable(parent-id) REFERENCES ChildTable(parent-id) ON DELETE CASCADE

问题: 父母可以有多个孩子,并且父表依赖于子表。如果父母有两个孩子,我们从ChildTable中删除一个孩子记录,它也会删除父母,而另一个孩子的记录必须存在于数据库中。

是否有任何其他 MySQL 方法/约束可以满足上述要求。

提前致谢。

更新:我想详细解释我的问题。

我想将以下规则应用于数据库:

  • 父表中的一条记录必须始终依赖于子表中的任何一条或两条记录。(同样添加了 FK。)
  • 有可能 2 个孩子可以指向同一个 parentID
  • 如果我们删除一个具有 parentID 的孩子(比如“abc”),那么如果存在另一个具有相同 parentID 的孩子,则不能删除 parent id。
  • 在删除具有相同 parentID('abc') 的第二个孩子时,现在必须将其删除,因为没有具有 parentID('abc') 的孩子。
4

1 回答 1

3

您的外键应该反转:

FOREIGN KEY parent-id REFERENCES ParentTable(parent-id) ON DELETE CASCADE

您希望子表引用父表中的主键。但要小心级联删除:删除父行时,会自动删除其所有子行。

当您删除一个子行时,父行不会发生任何事情。

更新:您想要的只能使用触发器来完成。您需要创建一个AFTER DELETE触发器ChildTable来检查是否ParentTable可以删除其中的行。

于 2012-07-20T08:01:23.650 回答