[英]Adding primary/foreign keys and referencing other tables
我在键引用方面遇到了一些麻烦。 当我尝试将数据插入表标记时,错误来自
INSERT INTO Mark(examID, studentID, result, occured, noOFAttempts)
VALUES ('B10', '1', '67', '11-JUL-07', '1');
我收到错误:
integrity constraint violated - parent key
not found
内容:
表格Exam和Student代表有关大学考试和学生的数据。 通过使用Exam中的id列和Student中的id列,将学生的考试结果(包括学生在考试中的尝试次数(noOfAttempts))记录在Mark表中。 两个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));
我该如何解决我知道与错误引用有关的错误,谢谢
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
,但是该ID在Exam
和/或Student
表中都不存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.