2016-07-07 27 views
1

私は、プロジェクトテーブルにプライマリキー "projectID"を持っています。各プロジェクトはプライマリキー "taskID"を持つ私のタスクテーブルにタスクを持ち、 "ProjetID"という外部キーを持っています。削除と外部キー制約SQL

私はプロジェクトを削除すると、このプロジェクトで実行されたタスクがタスクテーブルに残り、削除されない可能性があるかどうかを知りたいと思っています。

+0

[ON DELETE CASCADE] [このレスポンスをチェックアウト]を使用する必要があります(http://stackoverflow.com/a/13444888/4269347) – Petter

+0

カスケードは削除されたプロジェクトに依存するタスクを自動的に削除します!私はプロジェクトを削除するときにタスクを削除したくありません – josef

+0

あなたは何をしたいですか?そのプロジェクトのタスク・テーブル・データに何が起こると予想されますか? – jarlh

答えて

1

プロジェクトを削除する前に、ProjetIDをnullに設定する必要があります。あなたはもうプロジェクトを見つけることができないので、とにかくそれを保つのは理にかなっていません。

ON DELETE SET NULLを使用できます。追加のSQL文を実行する必要はありません。

+0

私はあなたの解決策を試しますが、私の問題は解決しません。 – josef

+0

私は、あなたが試したこととその問題についての十分な情報がありません。だからあなたを助けることはできない。 –

0

FOREIGN KEY宣言は、列​​のサブローのNULL以外の値も、その列のサブローの値としてREFERENCESテーブルに表示する必要があることをDBMSに通知します。それがあなたの望むものなら、それを宣言してください。それがあなたが望むものでないなら、しないでください。

タスクにはFOREIGN KEY Task (projectID) REFEFERENCES Project (projectID)と表示されます。しかし、あなたはcontradictorilyは、ProjectのprojectID値ではないにもかかわらず、taskIDの値をTaskにしたいと言っています。それがあなたの望むものならば、は外来の鍵を望ましくないからです。したがってはそれを宣言していません

照会するために外部キー、主キー、一意キーまたは他の制約を宣言する必要はありません。彼らは、DBMSに対して、有効なデータベース状態については特定のことが真であると伝えます。 (したがって、無効な状態をなくし、クエリを最適化することができます)