[pgsql-jp: 27762] Re: 外部キーの設定に関しまして
羽生 章洋
habu @ air-beat.com
2002年 10月 26日 (土) 23:33:32 JST
"msweb" <msweb @ usen-43x235x183x54.ap-USEN.usen.ad.jp>さん:
はじめまして、羽生と申します。
> ある書籍からのデータを元にしてテーブルの外部キーを設定したのですが、
どうして
> も希望する設定ができません。
項目名から推測するに恐らく私の書籍のように感じますが(^^;;
テーブル名だけ変更されているんですよね。以下そのつもりでレスします。
uriage_jouhouから、uriage_meisaiへの外部キー設定をERDを参考にして
つけたいということであれば、かかれているようにuriage_meisaiに
FOREIGN KEYの記述をするだけでOKです。
逆向きの外部キー設定は通常は不要です。ですから、
> FOREIGN KEY(psales_no) -- 自分の主キーを外部キーにできないはず
> REFERENCES uriage_meisai(psales_no) -- 相手の主キーは2つのカラ
ムの組なの
> に一つして指定できない
という設定は通常は行いません。参照される側(親)に対しては、
何も行いません。あくまでも参照する側(子)に対してのみです。
で、やりたいことが良くわからないのですが、ひょっとして
子供であるuriage_meisaiのレコードが削除されたら、
親であるuriage_jouhouの対応するレコードも削除したいということ
でしょうか?
それであれば、トリガを使うことになるかと思いますが、他に子供が
あったらどうするのか、ということも考えなければならないので、
面倒ではないかと思います。
で、どうしてもということであれば、やはりお書きになられている
ように、2つの列を外部キーとして設定することになります。
判りやすくするためにALTER TABLEで制約を後付けしています。
# 煩雑になるので、他の項目は省略してます。
CREATE TABLE uriage_jouhou (
psales_no INT4 NOT NULL,
sales_no INT4,
PRIMARY KEY (psales_no)
);
CREATE TABLE uriage_meisai (
sales_no INT4 NOT NULL,
psales_no INT4,
PRIMARY KEY (sales_no, psales_no)
);
ALTER TABLE uriage_jouhou
ADD FOREIGN KEY (sales_no,psales_no)
REFERENCES uriage_meisai
ON DELETE SET NULL;
ALTER TABLE uriage_meisai
ADD FOREIGN KEY (psales_no)
REFERENCES uriage_jouhou
ON DELETE SET NULL;
ただ、これが必要となるケースというのが全然想像できないので、
(というか、どうやってレコードを入れるんだろうか^^;)
よろしければ、やりたいことをお教えいただけますでしょうか。
そうすれば別の方法を提示できるかと思います。
================================================================
★ワクワク音楽体験サイト それが【エア・ビート・ドットコム】!★
================================================================
有限会社エア・ビート(http://www.air-beat.com/)
取締役兼CEO 羽生 章洋(mailto:habu @ air-beat.com)
================================================================
pgsql-jp メーリングリストの案内