ハンドルネーム |
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)) >/ >
|