2017-01-22 112 views
0

Im有一些关键引用问题。这个错误来自当我尝试将数据插入到表标志添加主键/外键并引用其他表格

INSERT INTO Mark(examID, studentID, result, occured, noOFAttempts) 
    VALUES ('B10', '1', '67', '11-JUL-07', '1'); 

我得到的错误:

integrity constraint violated - parent key 
not found 

语境:

的表格考试和学生代表约大学考试和 数据学生们。学生的考试成绩包括 学生在考试中的考试次数(noOfAttempts),通过使用来自考试的ID列和 学生的ID列记录在 表中。这两个ID列都有唯一的值。学生只有每次考试记录的最新成绩 。

编写一个SQL命令来创建标记表。包括主键 和上面指定的表格中明显的外键。

CREATE TABLE Exam (
id VARCHAR(255), 
subject VARCHAR(255), 
noOfStudents INT, 
PRIMARY KEY (id)); 

-

CREATE TABLE Student (
id INT, 
name VARCHAR(255), 
PRIMARY KEY (id)); 

-

CREATE TABLE Mark (
examID VARCHAR(255), 
studentID INT, 
result INT, 
occured DATE, 
noOFAttempts VARCHAR(255), 
FOREIGN KEY (noOFAttempts) REFERENCES Exam(id), 
FOREIGN KEY (noOFAttempts) REFERENCES Student(id)); 

如何解决我知道它有错误引用做错误,谢谢

回答

2

一些Mark背后的逻辑桌子对我来说很有意义。它将考试与参加考试的学生相关联。但是使noOfAttempts成为外键的动机似乎没有多大用处。 表中的两个外键,examIDstudentID,这两个字段的组合也是主键。这里是什么Mark定义可能看起来像要避免这些错误:

CREATE TABLE Mark (
    examID VARCHAR(255), 
    studentID INT, 
    result INT, 
    occured DATE, 
    noOFAttempts VARCHAR(255), 
    FOREIGN KEY (examID) REFERENCES Exam(id), 
    FOREIGN KEY (studentID) REFERENCES Student(id), 
    PRIMARY KEY (examID, studentID) 
) 

同样,我看不出做noOfAttempts任何形式的关键点,而我认为这应该只是一个定期专栏Mark表。每个请求

编辑从戈登:

当你做你的插入,你试图创建Mark记录,其中提到并不存在父记录。对于原始表格,您试图插入'1'作为noOfAttempts,但该表格不存在于Exam和/或Student表格中。

+0

@GordonLinoff更新,感谢您的警惕。 –

+0

感谢Tim和@GordonLinoff,这使我的错误变得清晰,使用数据更新了表格并解决了问题。不要觉得我完全清醒,但哈哈。再次感谢 –