[pgsql-jp: 32561] Re: 外部キーについて

馬場 泰明 ( 川上) kawakami @ mxe.nes.nec.co.jp
2004年 3月 24日 (水) 21:46:42 JST


to:平塚様

馬場と申します。お世話になります。

エラーの内容ですが、外部キーが参照しに行く列は一意である必要があります
っという意味だと思います。

# まだ PostgreSQL になれていないのですが、少なくとも Oracle の場合、
# REFERENCES で指定する列は、主キーもしくは一意キーである必要があります。

WHATS_NEW_CHARA 表に、以下の制約を追加したところ、WHATS_NEW 表の作成が
うまくいきました。

sampledb=# alter table WHATS_NEW_CHARA add unique (MENU_ID);
NOTICE:  ALTER TABLE / ADD UNIQUE will create implicit index "whats_new_chara_menu_id_key" for table "whats_new_chara"
ALTER TABLE
sampledb=# alter table WHATS_NEW_CHARA add unique (TITLE_ID);
NOTICE:  ALTER TABLE / ADD UNIQUE will create implicit index "whats_new_chara_title_id_key" for table "whats_new_chara"
ALTER TABLE
sampledb=# alter table WHATS_NEW_CHARA add unique (CHARA_DATA);
NOTICE:  ALTER TABLE / ADD UNIQUE will create implicit index "whats_new_chara_chara_data_key" for table "whats_new_chara
"

以上ご参考になれば幸いです。

/ばば やすあき


2004/03/24 21:34:22 +0900に"Kazuhiro Hiratsuka" <hira @ js-bros.co.jp>さんに頂いた
「[pgsql-jp: 32558] 外部キーについて」への返事です。
>はじめまして平塚と申します。
>すみません。先程のメールにエラーの内容をつけていませんでした。
>
>現在、Linux環境でpostgreSQL7.4.1を使用しています。
>親と子のテーブル2つを参照制約付きで作成しようとしているのですが、
>親のテーブルは正常に作成できたのですが、子の作成でエラーが発生して原因が掴め
>ません。
>テーブル構成は、
>【親】
>CREATE TABLE WHATS_NEW_CHARA (
>        MENU_ID SMALLINT NOT NULL,      -- メニューID
>        TITLE_ID SMALLINT NOT NULL,     -- タイトルID
>        CHARA_DATA CHAR (32) NOT NULL,  -- キャラデータ名
>        REFIX_DATE DATE NOT NULL        -- 更新日
>);
>CREATE UNIQUE INDEX I_WHATS_NEW_CHARA1 on WHATS_NEW_CHARA
>        ( MENU_ID, TITLE_ID, CHARA_DATA );
>
>【子】
>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 WHATS_NEW_CHARA(MENU_ID),
>        FOREIGN KEY(TITLE_ID)   REFERENCES WHATS_NEW_CHARA(TITLE_ID),
>        FOREIGN KEY(CHARA_DATA) REFERENCES WHATS_NEW_CHARA(CHARA_DATA)
>);
>
>CREATE UNIQUE INDEX I_WHATS_NEW1 on WHATS_NEW
>        ( REFIX_DATE );
>です。
>
>エラーの内容は、
>psql:WhatsNew.sh:12: ERROR:  there is no unique constraint matching given
>keys for referenced table "whats_new_chara"
>です。
>
>どなたかご教授お願い致します。



pgsql-jp メーリングリストの案内