0

早晨,

我有三张桌子:

表:债务人

id           -    INT(11)
type         -    ENUM('c', 'p')

表:公司

id           -    INT(11)
debtor_id    -    INT(11)
and a lot of other fields for companies

表:private_individuals

id           -    INT(11)
debtor_id    -    INT(11)
and a lot of other fields for private individuals

公司外键 SQL(个人也用):

INDEX `fk_private_individual_debtors1` (`debtor_id` ASC) ,
  CONSTRAINT `fk_private_individual_debtors1`
    FOREIGN KEY (`debtor_id` )
    REFERENCES `application_user`.`debtors` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)

当我删除公司或个人时,我希望债务人也被删除,并且它也应该以相反的方式工作(删除债务人,公司或个人也会被删除)。

我正在考虑用触发器来做到这一点,但我想有更好的方法来做到这一点..

有人可以帮忙吗?

4

1 回答 1

1

删除债务人,公司或个人也会被删除:

这可以通过ON DELETE CASCADE. 您在定义外键时指定它,并应用于表上的所有删除。您不能在单独的 DELETE 级别提及这一点。请参阅MySql 手册中的FOREIGN KEY Constraints记住这在大多数情况下是危险的,最好在应用程序代码中使用此逻辑。

当我删除公司或个人时,我希望债务人也被删除

这是直接不可能的。您已经在公司和债务人之间建立了外键关系,但可以有多个公司与债务人关联。外键中没有任何东西可以阻止这种情况。您可能有其他应用程序逻辑(在过程中、在您的 java/C# 代码中、在触发器中),但外键级别根本没有任何内容。因此,由于这是通过额外的应用程序逻辑实现的,因此您的删除也将需要额外的应用程序逻辑。需要注意的另一点是:只有在删除所有子记录时才应删除 [arent。

于 2012-05-15T18:35:35.313 回答