■SI Object Browser 掲示板
|
ユーザの皆様、開発者、サポート担当者の交流のための掲示板です! ユーザーの皆様同士で教え合ったりもできる交流の場にしたいと思っていますので、相互協力をよろしくお願いします。 なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。 |
|
| ※各投稿のカラーは対象となる製品に対応しています。【■…OB ■…OBER ■…全般 ■…その他】 ※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。 ※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。 ※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。 | |
一つのテーブルから複数のFKキーを定義すると
2002/11/12 19:54
OBER
2
ほえほえ
ほえほえです。
一つのテーブルから複数のFKを定義すると、不正なFKを作成するスクリプトが出力
されるようです。
下記例ではQUOTATION(見積)テーブルからCUST_CP(取引先担当者)に3つのFKキーを
作成したいのですが、3つとも同じ物が作成されてしまいます。
今は手作業でスクリプトを修正していますが、こういったケースでは
どのようにするのがいいのでしょうか?
今のOBERでは参照先の項目は指定できますが、参照元の項目を設定する
ところがないようなのですが。
ALTER TABLE QUOTATION
ADD(CONSTRAINT FK_QUOTATION_3 FOREIGN KEY(CSC_CUST_CD, CTC_CUST_CD, CPC_CUST_CD, CSC_CUST_CNTCT_PSNAL_NO, CTC_CUST_CNTCT_PSNAL_NO, CPC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
/
ALTER TABLE QUOTATION
ADD(CONSTRAINT FK_QUOTATION_4 FOREIGN KEY(CSC_CUST_CD, CTC_CUST_CD, CPC_CUST_CD, CSC_CUST_CNTCT_PSNAL_NO, CTC_CUST_CNTCT_PSNAL_NO, CPC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
/
ALTER TABLE QUOTATION
ADD(CONSTRAINT FK_QUOTATION_5 FOREIGN KEY(CSC_CUST_CD, CTC_CUST_CD, CPC_CUST_CD, CSC_CUST_CNTCT_PSNAL_NO, CTC_CUST_CNTCT_PSNAL_NO, CPC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
/
一つのテーブルから複数のFKを定義すると、不正なFKを作成するスクリプトが出力
されるようです。
下記例ではQUOTATION(見積)テーブルからCUST_CP(取引先担当者)に3つのFKキーを
作成したいのですが、3つとも同じ物が作成されてしまいます。
今は手作業でスクリプトを修正していますが、こういったケースでは
どのようにするのがいいのでしょうか?
今のOBERでは参照先の項目は指定できますが、参照元の項目を設定する
ところがないようなのですが。
ALTER TABLE QUOTATION
ADD(CONSTRAINT FK_QUOTATION_3 FOREIGN KEY(CSC_CUST_CD, CTC_CUST_CD, CPC_CUST_CD, CSC_CUST_CNTCT_PSNAL_NO, CTC_CUST_CNTCT_PSNAL_NO, CPC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
/
ALTER TABLE QUOTATION
ADD(CONSTRAINT FK_QUOTATION_4 FOREIGN KEY(CSC_CUST_CD, CTC_CUST_CD, CPC_CUST_CD, CSC_CUST_CNTCT_PSNAL_NO, CTC_CUST_CNTCT_PSNAL_NO, CPC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
/
ALTER TABLE QUOTATION
ADD(CONSTRAINT FK_QUOTATION_5 FOREIGN KEY(CSC_CUST_CD, CTC_CUST_CD, CPC_CUST_CD, CSC_CUST_CNTCT_PSNAL_NO, CTC_CUST_CNTCT_PSNAL_NO, CPC_CUST_CNTCT_PSNAL_NO) REFERENCES CUST_CP (CUST_CD, CUST_CNTCT_PSNAL_NO))
/
返信を投稿
OBER
大場@SI
こんにちは
システムインテグレータの大場です。
以下のオペレーションで、対応可能かと思われます。
(見当違いの回答でしたらすみません。)
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に物理名を変更する。
5.CUST_CPより、QUOTATIONにFKを貼る。
6.QUOTATIONに作成されたCUST_CD, CUST_CNTCT_PSNAL_NOを属性画面で
CPC_CUST_CD,CPC_CUST_CNTCT_PSNAL_NOに物理名を変更する。
これでスクリプトを作成すると以下のようになります。
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))
/
システムインテグレータの大場です。
以下のオペレーションで、対応可能かと思われます。
(見当違いの回答でしたらすみません。)
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に物理名を変更する。
5.CUST_CPより、QUOTATIONにFKを貼る。
6.QUOTATIONに作成されたCUST_CD, CUST_CNTCT_PSNAL_NOを属性画面で
CPC_CUST_CD,CPC_CUST_CNTCT_PSNAL_NOに物理名を変更する。
これでスクリプトを作成すると以下のようになります。
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))
/
返信を投稿
OBER
ubu
はじめまして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))
>/
>
お世話になります。
私も同じように外部キーを作成するときに悩んでいます。
下記のようなテーブルをつくり
テーブル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))
>/
>
返信を投稿
OBER