2016-04-10 13 views
0

2つのテーブルにデータを挿入しようとしています。私はこれらの構造のいずれかにINSERTデータへ行くだろうか(Oracle)1対1および挿入クエリ

CREATE TABLE tableA 
(
    primaryKeyA INT PRIMARY KEY, 
    foreignKeyB INT 
); 

CREATE TABLE tableB 
(
    primaryKeyB INT PRIMARY KEY, 
    foreignKeyA INT 
) 

ALTER TABLE tableA 
CONSTRAINT fk_tableA 
    FOREIGN KEY (foreignKeyB) REFERENCES tableB (primaryKeyB); 

ALTER TABLE tableB 
CONSTRAINT fk_tableB 
    FOREIGN KEY (foreignKeyA) REFERENCES tableA (primaryKeyA); 

?私が試してみると、親キーが見つからないことが分かりますが、これは真実ですが、作成中に同じキーを使わずに作成する方法がわかりません。

+0

あなたの挿入ステートメントを投稿してください。 – LearningPhase

+0

INSERT INTO PRODUCTSOORT( "primaryKeyA"、 "foreignKeyB")VALUES(1,1); これは私にforeignKeyBにsincがないことを伝えるエラーを与えるでしょうまだ私はそれを作成していません –

+0

あなたは確かにこれらの制約が必要ですか?あなたはどちらかのテーブルから取り除かなければなりません。 AはBに依存し、BはAに依存する – LearningPhase

答えて

0

ここにあなたが何を持っているかは、多面的な関係です。これを解決するために中間テーブルを用意する必要があります。例えば

:(申し訳ありませんが、構文、現時点ではDBへのアクセス何をテストしません)

CREATE TABLE tableA 
    (
     primaryKeyA INT PRIMARY KEY 
); 

    CREATE TABLE tableB 
    (
     primaryKeyB INT PRIMARY KEY 
); 

    CREATE TABLE tableAB 
    (
     primaryKeyA INT , 
     primaryKeyB INT 
); 

    ALTER TABLE tableAB 
    ADD CONSTRAINT pk_tableAB 
     PRIMARY KEY (primaryKeyA, primaryKeyB); 

    ALTER TABLE tableAB 
    CONSTRAINT fk_tableAB_B 
     FOREIGN KEY (primaryKeyB) REFERENCES tableB (primaryKeyB); 

    ALTER TABLE tableAB 
    CONSTRAINT fk_tableAB_A 
     FOREIGN KEY (primaryKeyA) REFERENCES tableA (primaryKeyA); 

基本的に、あなたは「アドレス」と「顧客」として表Aと表Bを考える場合には(

顧客はアドレスは多くの顧客同じ家に住んでいる(つまり、複数の人)に属することができ 多くのアドレス(すなわち住宅、メーリングリストなど)を持つことができます簡単な例)のために、 あなたは状況があります。

これは多対多の関係ですが、他にも述べたように、FKを作成すると「円」になり、何も挿入できなくなります。 リンクを「中断する」必要があります。あなたは中間テーブルを使ってそれを行い、関係を説明します。

これが役に立ちます。

**また、MySQLですか?またはOracle? ..それは両方にすることはできません;)私のソリューションは両方のために動作するはずです

関連する問題