[pgsql-jp: 32565] Re: 外部キーについて
Tatsuo Ishii
t-ishii @ sra.co.jp
2004年 3月 24日 (水) 23:46:32 JST
石井です.
> 今回の仕様が、親テーブルのUNIQUE制約としてMENU_ID、TITLE_ID、CHARA_DATAを
> 1つとして考えております。
> よって各々にUNIQUE制約を持たせることが今回の仕様上できません。
> PRIMARY(MENU_ID、TITLE_ID、CHARA_DATA)または
> UNIQUE INDEX(MENU_ID、TITLE_ID、CHARA_DATA)で宣言した場合は、
> 子から外部キーをつけることが出来ないということでしょうか。
本当に被参照テーブルWHATS_NEW_CHARAの(MENU_ID,TITLE_ID,CHARA_DATA)がユ
ニーク(かつ個々の列だけではユニークにならない)で,かつ参照テーブルから
その一部の列を外部キーとして参照しなければならないとしたら,テーブル設
計がおかしいのではないでしょうか?もしくは,そもそも不要な外部キーをは
ろうとしているのかのどちらかのような気がします.
データの意味もテーブル設計の前提条件も分からないので単なる推測ですが,
たとえば他に
CREATE TABLE menus (
menu_id smallint primary key,
menu_name text
);
のようなマスターテーブルがあり,実は
CREATE TABLE WHATS_NEW (
UP_DATE DATE NOT NULL, -- 日付
MENU_ID SMALLINT NOT NULL, -- メニューID
TITLE_ID SMALLINT NOT NULL, -- タイトルID
CHARA_DATA CHAR(32) NOT NULL, -- キャラデータ名
REFIX_DATE DATE NOT NULL, -- 更新日
FOREIGN KEY(MENU_ID) REFERENCES menus(menu_id),
);
だけで十分とか,はたまた
CREATE TABLE WHATS_NEW (
UP_DATE DATE NOT NULL, -- 日付
MENU_ID SMALLINT NOT NULL, -- メニューID
TITLE_ID SMALLINT NOT NULL, -- タイトルID
CHARA_DATA CHAR(32) NOT NULL, -- キャラデータ名
REFIX_DATE DATE NOT NULL, -- 更新日
PRIMARY KEY (UP_DATE, MENU_ID,TITLE_ID,CHARA_DATA),
FOREIGN KEY(MENU_ID,TITLE_ID,CHARA_DATA) REFERENCES
WAHTS_NEW(MENU_ID,TITLE_ID,CHARA_DATA)
);
が正解とか.
もう一度ER図を書くなどして,テーブル設計を見直した方がよいような気がし
ます.
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内