0

友人の私は、3 つの列を持つ複合主キーを持つテーブルを作成します。次に、2 つの列のみを参照する子テーブルを作成します。これはエラーになります。ベース テーブルから 2 つの列のみを参照するのを手伝ってください。

CREATE TABLE STUDENT
( SID NUMBER
, NAME VARCHAR2(20)
, DEPT VARCHAR2(20)
, CARD_F NUMBER
, CARD_S NUMBER
, PRIMARY KEY (SID, CARD_F, CARD_S)
); 

CREATE TABLE MASTER
( BOOKNO NUMBER
, CARD_S NUMBER
, FOREIGN KEY (BOOKNO) 
    REFERENCES STUDENT(CARD_F)
); 
4

3 に答える 3

1

外部キーは、定義上、別のテーブルのキーです。キーでないタプルを参照することはできません。

以下の W3schools の外部キー ページを参照してください。

あるテーブルの FOREIGN KEY は、別のテーブルの PRIMARY KEY を指します。

(リンク)

于 2012-08-30T08:56:17.493 に答える
1

bookno が card_f という名前の列から値を取得するのは奇妙に思えます。

この誤った参照にはいくつかの異なる方法があります

, FOREIGN KEY (BOOKNO) 
    REFERENCES STUDENT(CARD_F)

固定できます。

  1. student.card_f に主キー制約を作成します。
  2. student.card_f に一意の制約を作成します。
  3. bookno 列に主キー制約または一意制約がある別のテーブル (books.bookno など) を参照します。
  4. 生徒テーブルの列 {card_s, card_f} のペアに主キーまたは一意の制約を作成し、それを で参照しforeign key (card_s, card_f) references student (card_s, card_f)ます。
  5. master に SID 列を追加し、 で完全なキーを参照しforeign key (sid, card_s, bookno) references student (sid, card_s, card_f)ます。

それらのうち、3、4、および 5 があなたのケースで最もうまくいく可能性があります。

于 2012-08-30T09:34:45.037 に答える
0

オプション:

1> Please check if you can create a unique Key on the two columns on the base table the you want to refer to.

2> a)If you cant create unique key then intoduce a 3rd table which would maintain 
    distinct combination of column values for columns, to be included in F.K.
    through a trigger on base table.

   b)Make columns in your child table refer(F.K) to this newly introduced table
于 2012-08-30T09:40:07.673 に答える