我在使用键引用方面遇到了一些麻烦。当我尝试将数据插入表标记
时,错误来自INSERT INTO Mark(examID, studentID, result, occured, noOFAttempts)
VALUES ('B10', '1', '67', '11-JUL-07', '1');
我收到错误:
integrity constraint violated - parent key
not found
背景:
表格考试和学生代表有关大学考试的数据 学生们。考试成绩为学生,包括学生人数 学生在考试中的尝试(noOfAttempts),被录入 table使用Exam中的id列和来自的id列标记 学生。两个id列都具有唯一值。一个学生只有 每项考试记录的最新成绩。
编写SQL命令以创建Mark表。包括主键 在上面指定的表格中显而易见的外键。
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));
如何修复我知道错误引用的错误,谢谢
答案 0 :(得分:2)
Mark
表背后的一些逻辑对我有意义。它将考试与参加考试的学生联系起来。但是使noOfAttempts
成为外键的动机似乎没有多大用处。该表中有 两个外键examID
和studentID
,这两个字段的组合也是主键。以下是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
表中不存在此ID。< / p>