繁体   English   中英

添加主/外键并引用其他表

[英]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为外键的动机似乎没有多大作用。 该表中两个外键, 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 ,但是该ID在Exam和/或Student表中都不存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM