2016-10-18 13 views
1

だから私は、私はしばらくの間、今で立ち往生してきた私の割り当てには、次の質問があります。従業員SがSQL:何かが削除されたときにデータベースを変更する方法?

を削除されたとき、私は

を。従業員および部署のFKをNULLに設定する

ii。 Works_OnとDependentの参照された行を削除してください

私はCASE文を使用するべきだと考えていましたが、SQLをどのように構造化するべきかわかりません。私はPostgreSQLを使用しています。

次のリンクは、私のデータベース構造のスクリーンショットです: http://puu.sh/rMLjp/886c6e8a5b.png

+1

詳細な回答を得るためには、テーブル構造(さらに良いデータが必要です)を表示する必要があると思いますが、私の頭の上の「ON DELETE CASCADE」はあなたがここでやりたいことがあるように思えます。 –

+0

ああ、そうだ。だからここではCASEは使用しない。 これが許可されているかどうかはわかりませんが、ここに該当する表がある私のデータベース構造のスクリーンショットがあります。 http://puu.sh/rMLjp/886c6e8a5b.png – shinryu333

答えて

0

あなたがPostgreSQL manual on FOREIGN KEY constraintsを読みましたか?

制限とカスケード削除は、最も一般的な2つのオプションです。 RESTRICTは、参照される行の削除を防ぎます。 NO ACTIONは、制約がチェックされているときに参照元の行がまだ存在する場合、エラーが発生することを意味します。何も指定しなければ、これはデフォルトの動作です。 CASCADEは、参照された行が削除されると、参照される行が自動的に削除されるべきであることを指定します(この2つの選択肢の本質的な違いは、NO ACTIONではトランザクションの後半までチェックを延期できます)同じように。

他に2つのオプションがあります:SET NULLとSET DEFAULTです。これにより、参照行が削除されたときに、参照行の参照列がNULLまたはそれぞれのデフォルト値に設定されます。

例:

CREATE TABLE works_on (
    essn ... REFERENCES employee(ssn) ON DELETE SET NULL, 
    pno ..., 
    hours ... 
); 

私はあなたのスクリーンショットからあなたの列のデータ型を推測することはできません。しかし、マニュアルへの抜粋やリンク、そしてその部分的なコード例は、あなたが知る必要があるものを与えるはずです。

+0

ありがとうございました!それを読んで、私が何をする必要があるかを私に明らかにしました。 – shinryu333

関連する問題