■SI ObjectBrowser掲示板

ユーザの皆様、開発者、サポート担当者の交流のための掲示板です!discussion
ユーザーのみなさま同士で教え合ったり、アドバイスしたりする暖かい交流の場にしたいと思っていますので、相互協力をよろしくお願いします。なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。

※◆のカラーは投稿の対象となる製品に対応しています。【…OB …OBER …全般 ◇…その他】
※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。
※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。
※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。




投稿No.623
ツリー表示
2002/11/15 11:25:15
ハンドルネーム ubu
製品 OBER
タイトル Re: 一つのテーブルから複数のFKキーを定義すると
メッセージ本文 はじめましてubuと申します。
お世話になります。

私も同じように外部キーを作成するときに悩んでいます。
下記のようなテーブルをつくり

テーブルAAA
--------------------
ID :主キー
Data :一意

テーブルBBB
--------------------
ID :主キー
Data1 :
Data2 :

・リレーション
AAA.Data ---● BBB.Data1
AAA.Data ---● BBB.Data2

下記のような結果を得たい場合はどのようにしたらよいのでしょうか?
-(DDL)-----------------------

CREATE TABLE AAA
(
ID VARCHAR2(3) NOT NULL,
DATA VARCHAR2(100)
)
/
ALTER TABLE AAA
ADD(PRIMARY KEY (ID) USING INDEX)
/
ALTER TABLE AAA
ADD(CONSTRAINT AAA_UNQ UNIQUE (DATA) USING INDEX)
/
CREATE TABLE BBB
(
ID NUMBER(10,0) NOT NULL,
DATA1 VARCHAR2(100),
DATA2 VARCHAR2(100)
)
/
ALTER TABLE BBB
ADD(PRIMARY KEY (ID) USING INDEX)
/
ALTER TABLE BBB
ADD(CONSTRAINT FK_1 FOREIGN KEY(DATA1) REFERENCES AAA (DATA))
/
ALTER TABLE BBB
ADD(CONSTRAINT FK_2 FOREIGN KEY(DATA2) REFERENCES AAA (DATA))
/


以下のオペレーションを試してみました。

>以下のオペレーションで、対応可能かと思われます。
>(見当違いの回答でしたらすみません。)
>
>1.CUST_CPより、QUOTATIONにFKを貼る。
>
>2.QUOTATIONに作成されたCUST_CD, CUST_CNTCT_PSNAL_NOを属性画面で
>CSC_CUST_CD,CSC_CUST_CNTCT_PSNAL_NOに物理名を変更する。

ここでリレーションをつないだ項目に主キーがついてしまっているのではずします。
「登録」ボタンをクリック
「主キー項目の情報を外部キー項目に反映させますか?」
のメッセージに「いいえ」で回答

>3.CUST_CPより、QUOTATIONにFKを貼る。
>
>4.QUOTATIONに作成されたCUST_CD, CUST_CNTCT_PSNAL_NOを属性画面で
>CTC_CUST_CD,CTC_CUST_CNTCT_PSNAL_NOに物理名を変更する。

2と同様の操作

<5.6.省略>

で、この操作で期待通りの結果が得られました。

が、その後設定を保存してモデルのファイルを開きなおすと
はずしたはずの外部キーで自動設定された主キーが復活してしまっています。

さらにフィールド名は物理名を変更する前の状態になってます。
(フィールド名を変更した物はそのままです。)

以上ですが。何かオペレーションなどにミスがあればご教授ください。
よろしくお願いします。

>これでスクリプトを作成すると以下のようになります。
>
>ALTER TABLE QUOTATION
> ADD(CONSTRAINT FK_3 FOREIGN KEY(CSC_CUST_CD, CSC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
>/
>ALTER TABLE QUOTATION
> ADD(CONSTRAINT FK_2 FOREIGN KEY(CTC_CUST_CD, CTC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
>/
>ALTER TABLE QUOTATION
> ADD(CONSTRAINT FK_1 FOREIGN KEY(CPC_CUST_CD, CPC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
>/
>
元の文章を引用して返信