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

Kazuhiro Hiratsuka hira @ js-bros.co.jp
2004年 3月 24日 (水) 22:25:22 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)で宣言した場合は、
子から外部キーをつけることが出来ないということでしょうか。

無知の上、いろいろとご質問をさせていただきすみません。

----- Original Message ----- 
From: "Kazuhiro Hiratsuka" <hira @ js-bros.co.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Wednesday, March 24, 2004 9:57 PM
Subject: [pgsql-jp: 32562] Re: 外部キーについて


> 馬場様
>
> 誠に早いレスポンス有難うございます。
> 早速試してみます。
>
>
> ----- Original Message ----- 
> From: "馬場 ( 川上) 泰明" <kawakami @ mxe.nes.nec.co.jp>
> To: <pgsql-jp @ ml.postgresql.jp>
> Sent: Wednesday, March 24, 2004 9:46 PM
> Subject: [pgsql-jp: 32561] Re: 外部キーについて
>
>
> > 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 メーリングリストの案内