2017-01-22 15 views
0

キーの参照にいくつか問題があります。エラーiは表のマークにデータを挿入しようとするから来ているプライマリ/外部キーの追加と他のテーブルの参照

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列も一意の値を持ちます。最新の試験結果は 件のみです。

Markコマンドを作成して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)); 

私はその間違った参照を行うには知っているエラーをどのように修正すればよい、感謝

答えて

2

Markの背後にあるロジックの一部テーブルは私にとって意味があります。その試験に参加した学生に試験を関連づけます。しかし、noOfAttemptsを外部キーにする動機付けはあまり目的を果たさないようです。 は、examIDstudentIDの2つの外部キーであるであり、これら2つのフィールドの組み合わせも主キーです。ここで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) 
) 

繰り返しますが、私はむしろ、私はそれだけで1つの通常の列すべきだと思い、どのような種類のnoOfAttemptsキーを作るのポイントが表示されませんMarkテーブルゴードンからのリクエストごと

編集:あなたの挿入をしたとき

、あなたは存在しなかった親レコードと呼ばMarkにレコードを作成しようとしました。元のテーブルの場合、noOfAttemptsとして'1'を挿入しようとしましたが、このIDはExamおよび/またはStudentテーブルには存在しませんでした。

+0

@GordonLinoff更新が行われました。ここでご迷惑をおかけしております。 –

+0

ティムと@GordonLinoff、これは私のエラーをクリアし、データでテーブルを更新し、問題を修正しました。私はまだ完全に目を覚ましているとは思わない。再度、感謝します –

関連する問題