2016-03-18 47 views
0

我不斷收到錯誤代碼'ORA-02270',無論我嘗試什麼,我似乎無法修復它。下面是我的創建表語句:這個錯誤是什麼意思? SQL錯誤:ORA-02270:這個列表沒有匹配的唯一或主鍵

CREATE TABLE student 
(
    studentID CHAR(8) PRIMARY KEY, 
    studentName VARCHAR(25) NOT NULL, 
    studentAddress VARCHAR(30) NOT NULL, 
    studentDOB DATE NOT NULL, 
    studentGender CHAR(1) NOT NULL CHECK ((studentGender = 'F') OR (studentGender = 'M')), 
    studentNationality VARCHAR(15) NOT NULL, 
    studentCourse VARCHAR(30) NOT NULL, 
    studentSemesterExcellent CHAR(1) NOT NULL CHECK ((studentSemesterExcellent = 'Y') OR (studentSemesterExcellent = 'N')) 
); 

CREATE TABLE leaseAgreement 
(
    leaseNo CHAR(6) PRIMARY KEY, 
    studentID CHAR(8) NOT NULL, 
    leaseAccommodationType VARCHAR2(10) NOT NULL, 
    leaseDuration NUMBER NOT NULL, 
    leaseStartDate DATE NOT NULL, 
    leaseEndDate DATE, 
    studentSemesterExcellent CHAR(1) NOT NULL CHECK ((studentSemesterExcellent = 'Y') OR (studentSemesterExcellent = 'N')), 
    FOREIGN KEY (studentID) REFERENCES student(studentID), 
FOREIGN KEY (studentSemesterExcellent) REFERENCES student(studentSemesterExcellent) 
); 

我不允許從同一個表有兩個外鍵?請有人解釋這個錯誤,並指出我在正確的方向。謝謝。

+1

如錯誤消息所述,外鍵必須在父表中引用主鍵或唯一約束。 'student.studentSemesterExcellent'既不是。 「studentSemesterExcellent」這個奇怪的外鍵背後的邏輯並不完全清楚 – mustaccio

回答

0

首先,mustaccio的回答是正確的。 表'student'中的'studentSemesterExcellent'列不是關鍵列。您不能在外鍵約束中引用它。

如果你讓它獨一無二,你只能在學生表中有兩行,而不是你想要的。

其次,你已經用MySQL和Oracle標記了這個問題。選一個!

第三,如果它不是空列,則只需要一個FK。不要讓自己更難。第四,如果這是Oracle數據庫,建議僅對字符串數據使用varchar2()。由於兼容性原因,char和varchar數據類型存在。