0

朝、

私は3つのテーブルを持っています:

表:債務者

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マニュアルの外部キー制約を参照してください。これはほとんどの場合危険であり、アプリケーションコードにこのロジックを含めることをお勧めします。

会社や個人を削除するときは、債務者も削除してほしい

これは直接不可能です。会社と債務者の間に外部キー関係を構築しましたが、債務者に関連付けられている会社が複数存在する可能性があります。これを妨げる外部キーには何もありません。追加のアプリケーションロジック(プロシージャ、java / C#コード、トリガー)がある場合がありますが、外部キーレベルには何もありません。したがって、これは追加のアプリケーションロジックによって実現されるため、削除には追加のアプリケーションロジックも必要になります。もう1つの注意点は、[arentは、その子レコードがすべて削除された場合にのみ削除する必要があるということです。

于 2012-05-15T18:35:35.313 に答える