0

朋友的我创建了一个具有三列复合主键的表,然后我创建了仅引用两列的子表。这将导致错误..请帮助我仅引用基表中的两列。

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

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. 将 SID 列添加到 master,并使用foreign key (sid, card_s, bookno) references student (sid, card_s, card_f).

其中,3、4 和 5 最有可能适用于您的情况。

于 2012-08-30T09:34:45.037 回答
1

外键定义为另一个表中的键。您不能引用不是键的元组。

请参阅下面 W3schools 的外键页面:

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

链接

于 2012-08-30T08:56:17.493 回答
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 回答