2011-11-13 8 views
0

私はちょうどSQLで始まっています。私は、SQLテーブルへのリレーショナルスキームを含む割り当てを行っています。存在しないテーブルフィールドへのSQL外部キー

私は次のことをどのように表現するかに大きな疑問があります。私は、次のSQLで表現されているテーブル「オリジナル」を持っている を:

create table Original (
    idB  char(10)  not null unique, 
    tituloM varchar(255) not null, 
    primary key (idB, tituloM), 
    foreign key (idB, tituloM) references Musica on delete cascade on update cascade 
); 

私は今、「ライブ」の表を表現しなければなりません ライブ(idB; tituloM;データ; hora; tituloMO)。idBtituloMOは「オリジナル」の外部キーです。疑いの余地は、「オリジナル」の表に「tituloMO」はありません。どのように私はこれを表すことができますか?現在、私の「オリジナル」の表は、次のようになります。

create table Live (
    idB  char(10) not null unique, 
    tituloM varchar(255) not null, 
    /* date goes here */ 
    /* time goes here */ 
    tituloMO varchar(255) not null, 
    primary key (idB, tituloM), 
    foreign key (idB, tituloM) references Musica on delete cascade on update cascade, 
    foreign key (idB, data, hora) references Concerto on delete cascade on update cascade, 
    foreign key (idB, tituloMO) 
); 

にはどうすれば正しくtituloMOフィールドを表すことができますか?

+1

タブを使用するコードを投稿しないでください - 再フォーマットする本当の痛みをすることができます。また、「あらかじめ感謝」のようなサインオフは必要ではありません(画面の不動産の浪費に加えて) - つまり、回答を選択してアップボーティングが行われます。 –

+0

どのDBMSを使用しますか?あなたの「外部キー」は親テーブルのフィールドを見逃しているように見えます。これは実際にどのDBMSでも許されていますか? –

+0

はい、私は本当に親テーブルのフィールドがありませんでした。ありがとう –

答えて

0

、あなたが同じ名前、唯一互換性のあるデータ型を持って対応する列のための必要はありません。

だから、あなたの制約は次のようになります。

create table Original (
    idB  char(10)  not null unique, 
    tituloM varchar(255) not null, 
    primary key (idB, tituloM), 
    foreign key (idB, tituloM) 
    references Musica (idB, tituloM)   --- you need these, too 
     on delete cascade 
     on update cascade 
); 

create table Live (
    idB  char(10) not null unique, 
    tituloM varchar(255) not null, 
    /* date goes here */ 
    /* time goes here */ 
    tituloMO varchar(255) not null, 
    primary key (idB, tituloM), 
    foreign key (idB, tituloM) 
    references Musica (idB, tituloM)   --- and these 
     on delete cascade 
     on update cascade, 
    foreign key (idB, data, hora) 
    references Concerto (idB, data, hora) --- and these 
     on delete cascade 
     on update cascade, 
    foreign key (idB, tituloMO) 
    references Original (idB, tituloM)  --- this is an assumption 
     on delete cascade      --- based on the datatypes 
     on update cascade, 
); 
1

テーブルでは、tituloMOフィールドが対応しているものが必要です。それは同じ名前である必要はありません。あなたは、例えば、マップのLive.tituloMO

Original.tituloMに私はあなたが持っているものDBMS知りませんでした

それは、親テーブルのフィールドが欠落しているように、あなたの外部キー構文が見えます。

これは、Oracleの入力方法です。あなたがFOREIGN KEY参照を行うと

foreign key (idB, tituloMO) references Original(idB, tituloM) on delete... 
+0

はい、私は本当に親テーブルのフィールドがありませんでした。ありがとう。 –

関連する問題