2017-01-22 6 views
0

Ich habe einige Probleme mit der Schlüsselreferenzierung. Der Fehler kommt aus, wenn ich versuche, Daten in Tabelle Mark einfügenHinzufügen von Primär-/Fremdschlüsseln und Referenzieren anderer Tabellen

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

ich den Fehler:

integrity constraint violated - parent key 
not found 

Kontext:

Die Tabellen-Prüfung und Schüler stellen Daten über College-Prüfungen und Studenten. Die Prüfungsergebnisse für die Schüler, einschließlich der Anzahl der Versuche, die ein Schüler bei einer Prüfung hatte (noOfAttempts), sind in Tabelle Mark unter Verwendung der ID-Spalte von Exam und der ID-Spalte von Student aufgezeichnet. Beide ID-Spalten haben eindeutige Werte. Ein Student hat nur das neueste Ergebnis für jede Prüfung aufgezeichnet.

Schreiben Sie einen SQL-Befehl, um die Mark-Tabelle zu erstellen. Schließen Sie die Primärschlüssel und die Fremdschlüssel aus den oben angegebenen Tabellen ein.

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)); 

Wie kann ich den Fehler beheben i sein weiß mit falscher Referenzierung zu tun, dank

Antwort

2

Einige der Logik hinter den Mark Tisch macht mir Sinn. Sie bezieht sich auf Prüfungen, die an die Studenten gerichtet sind, die diese Prüfungen abgelegt haben. Aber die Motivation, noOfAttempts einen Fremdschlüssel zu machen, scheint keinen großen Zweck zu erfüllen. Dort sind zwei Fremdschlüssel in dieser Tabelle, examID und studentID, und die Kombination dieser beiden Felder ist auch ein Primärschlüssel. Hier ist, was die Mark Definition könnte diese Fehler zu vermeiden, wie folgt aussehen:

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) 
) 

Wieder, ich weiß nicht, worauf es ankommt machen noOfAttempts ein Schlüssel jeglicher Art, sondern ich denke, es nur eine regelmäßige Kolumne sollte in die Mark Tabelle.

bearbeitet pro Anfrage von Gordon:

Wenn Sie Ihren Einsatz gemacht, versuchen Sie einen Datensatz in Mark, der Mutter genannten Aufzeichnungen zu schaffen, die nicht existieren. Im Fall Ihrer ursprünglichen Tabelle haben Sie versucht, '1' als noOfAttempts einzufügen, aber diese ID war in den Tabellen Exam und/oder Student nicht vorhanden.

+0

@GordonLinoff Update gemacht, danke für Ihre Wachsamkeit hier. –

+0

Danke Tim und @GordonLinoff, dies machte meine Fehler klar, aktualisierte die Tabellen mit Daten und es behob das Problem. Denke nicht, dass ich noch ganz wach bin, haha. Danke noch einmal –

Verwandte Themen