- ベストアンサー
FOREIGN KEYの書き方
オラクル9iを使っています たとえば ☆MST_商品テーブル ・商品コード varchar2(10) 主キー ・分類区分 varchar2(10) ・商品名称 varchar2(30) ・仕入先コード varchar2(10) ☆MST_仕入先テーブル ・仕入先コード varchar2(10)主キー ・仕入先名称 varchar2(30) ・取引区分 varchar2(30) があったとして 商品テーブルの仕入先コードと仕入先テーブルの仕入先コードにFOREIGN KEYを使ってリレーションを張りたい場合どのようにSQL文は書いたらいいのでしょうか? ☆CREATE TABLE MST_仕入先 (仕入先コード varchar2(10) NOT NULL, 仕入先名称 varchar2(30), 取引区分 varchar2(30), ALTER TABLE MST_仕入先 ADD CONSTRAINT PMST_仕入先 PRIMARY KEY(仕入先コード); と CREATE TABLE MST_商品 (商品コード varchar2(10), 分類区分 varchar2(10) 商品名称 varchar2(30), 仕入先コード varchar2(10), ALTER TABLE MST_商品 ADD CONSTRAINT PMST_商品 PRIMARY KEY(商品コード); でテーブルと主キーを設定し ALTER TABLE MST_商品 ADD CONSTRAINT FMST_商品 FOREIGN KEY(仕入先コード) REFERENCES MST_仕入先(仕入先コード); ほかにもいろいろ試したのですが にっちもさっちもいかないのでよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CREATE TABLE MST_仕入先 ( 仕入先コード varchar2(10) NOT NULL, 仕入先名称 varchar2(30), 取引区分 varchar2(30), CONSTRAINT PMST_仕入先 PRIMARY KEY(仕入先コード) ); CREATE TABLE MST_商品 ( 商品コード varchar2(10), 分類区分 varchar2(10) 商品名称 varchar2(30), 仕入先コード varchar2(10), CONSTRAINT PMST_商品 PRIMARY KEY (商品コード), CONSTRAINT FMST_商品 FOREIGN KEY (仕入先コード) REFERENCES MST_仕入先 ); または、 CREATE TABLE MST_仕入先 ( 仕入先コード varchar2(10) NOT NULL, 仕入先名称 varchar2(30), 取引区分 varchar2(30) ); ALTER TABLE MST_仕入先 ADD CONSTRAINT PMST_仕入先 PRIMARY KEY(仕入先コード) ; CREATE TABLE MST_商品 ( 商品コード varchar2(10), 分類区分 varchar2(10) 商品名称 varchar2(30), 仕入先コード varchar2(10) ); ALTER TABLE MST_商品 CONSTRAINT PMST_商品 PRIMARY KEY (商品コード) ; ALTER TABLE MST_商品 CONSTRAINT FMST_商品 FOREIGN KEY (仕入先コード) REFERENCES MST_仕入先 ; ※なお、サンプル SQL 文には全角スペースが入っているので、半角スペースに直してから貼り付けてください。
その他の回答 (1)
- 0026813
- ベストアンサー率50% (2/4)
risarisa6533さんのSQLで正しく参照整合性が設定できましたが、何が問題なんでしょう? (カンマやセミコロンを多少変更しましたが・・・) もし何らかのエラーが出るようでしたら、下記のSQLを試してみて下さい。 (単にCreateTable文中に設定を集めただけですが・・・) CREATE TABLE MST_仕入先 (仕入先コード varchar2(10) primary key, 仕入先名称 varchar2(30), 取引区分 varchar2(30)); CREATE TABLE MST_商品 (商品コード varchar2(10) primary key, 分類区分 varchar2(10), 商品名称 varchar2(30), 仕入先コード varchar2(10) CONSTRAINT FMST_商品 REFERENCES MST_仕入先(仕入先コード));
お礼
0026813さん回答ありがとうございます。 補足でお聞きしたいことがあるので もしよければ回答の方お願いします。
補足
entreeさん解答ありがとうございます。 上記のように教えていただいたようにして実行すれば 上手くいきました。 もう一つお聞きしていいですか?? オラクルにおいてリレーションで関連性をつける際には 子→親で子テーブル文にFOREIGNKEYを書くだけでよいのでしょうか??(例えば親子両方のテーブル文にFOREINGKEYを書くとか・・・は必要でしょうか?) また他のテーブルも同じように仕入先コードを外部キーにしようとすると「他の制約で使われている」って感じのメッセージがでるのですが・・・ 回答の方よろしくお願いします。