无效的FK和PK参考

时间:2011-11-15 15:00:26

标签: sql oracle foreign-keys reference primary-key

当我为所需的表标记主键引用时,无法创建表,因为oracle显示“此列列表没有匹配的唯一键或主键”。

第一张表成功创建:

CREATE TABLE TEST
  (
    TESTno VARCHAR2(6) NOT NULL,
    ExamNo VARCHAR2(6) NOT NULL,
    TEST_Date DATE NOT NULL,
    ACTUAL DATE,
    PREDICTED Date,
    CONSTRAINT TESTPKs PRIMARY KEY (TEST_Date, TESTno, ExamNo),
    CONSTRAINT TTESTNO_Fk FOREIGN KEY (TESTno) REFERENCES TESTPAPER (Flightno)
    CONSTRAINT TEXAMNo_FK FOREIGN KEY (ExamNo) REFERENCES Exam (ExamNo)
  );

这是我要创建的表格并给我错误:

CREATE TABLE Assignment
  (
    TEST_Date DATE NOT NULL,
    ExamNo VARCHAR2(6) NOT NULL,
    TestNo VARCHAR2(6) NOT NULL,
    Type  VARCHAR2(20),
    Hours_Spent Decimal(4,2),
    CONSTRAINT ASSIGNPKS PRIMARY KEY (TEST_Date, TestNo , ExamNo),
    CONSTRAINT ASSIGNTESTDATE_FK FOREIGN KEY (TEST_Date) REFERENCES TEST(TEST_Date) ON
  DELETE CASCADE,
    CONSTRAINT ASSIGNTESTNO_FK FOREIGN KEY (TESTno) REFERENCES TESTPAPER (Flightno)
    CONSTRAINT TEXAMNo_FK FOREIGN KEY (ExamNo) REFERENCES Exam (ExamNo)
  );

我可以知道它一直给我的问题在哪里没有匹配的唯一主键吗?我已经尝试重新创建并将'test_Date'标记为我的主键。但是oracle似乎无法找到。

由于

2 个答案:

答案 0 :(得分:4)

您引用的PK是PRIMARY KEY (TEST_Date, TESTno, ExamNo) - 因此外键也应该是FOREIGN KEY (TEST_Date, TESTno, ExamNo)。您收到的错误是由于您尝试引用TEST PK的一部分。

另见http://download.oracle.com/docs/cd/B10500_01/server.920/a96524/c22integ.htm

答案 1 :(得分:1)

检查外键中引用的表格。这些列必须是主键,否则在外表上是唯一的。