2012-11-21 3 views
-5

가능한 중복 :
Multiple-column foreign key in MySQL?SQL에서 다음과 같은 오류가 무엇입니까?

databses에서 쿼리를 작성하는 동안이 오류가 계속 :

외부 키의 참조 열 목록에서 열 수 ' FK__Asses__a_Type__4DB4832C '이 (가) 참조 된 테이블의 기본 키와 일치하지 않습니다.'Course_Assesments '

이 내가 쓴 코드는 다음과 같습니다

귀하의 문제는이 두 테이블에서입니다
CREATE DATABASE GUC_WEBSITE 

CREATE TABLE Members(email VARCHAR(30), f_Name VARCHAR(10), l_Name VARCHAR(10), 
    address VARCHAR(50), phone_1 INTEGER, phone_2 INTEGER, password VARCHAR(20), 
    PRIMARY KEY (email), UNIQUE (phone_1, phone_2)) 

CREATE TABLE Students(email VARCHAR(30), major VARCHAR(20), age INTEGER, student_ID VARCHAR(7) NOT NULL, 
    PRIMARY KEY (email), UNIQUE (student_ID), 
    FOREIGN KEY (email) REFERENCES Members) 

CREATE TABLE Graduates(email VARCHAR(30), dgree_1 VARCHAR(10), degree_2 VARCHAR(10), degree_3 VARCHAR(10), 
    PRIMARY KEY (email), FOREIGN KEY (email) REFERENCES Members) 

CREATE TABLE Undergraduates(email VARCHAR(30), gpa REAL NOT NULL, academic_year VARCHAR(6) NOT NULL, 
    PRIMARY KEY (email), FOREIGN KEY (email) REFERENCES Members) 

CREATE TABLE Staffs(email VARCHAR(30), department VARCHAR(10), staff_ID VARCHAR(7) NOT NULL, job_title VARCHAR(40), 
    PRIMARY KEY (email), UNIQUE (staff_ID), FOREIGN KEY (email) REFERENCES Members, UNIQUE (staff_ID)) 

CREATE TABLE Academic_Staffs(email VARCHAR(30), salary INTEGER, 
    PRIMARY KEY (email), FOREIGN KEY (email) REFERENCES Members) 

CREATE TABLE Deans(email VARCHAR(30), faculty VARCHAR(40) NOT NULL, 
    PRIMARY KEY (email), FOREIGN KEY (email) REFERENCES Members) 

CREATE TABLE Lecturers(email VARCHAR(30), course_Taught VARCHAR(30), 
    PRIMARY KEY (email), FOREIGN KEY (email) REFERENCES Members) 

CREATE TABLE Courses(course_ID VARCHAR(10), outcome VARCHAR(100), objective VARCHAR(100), content VARCHAR(100), course_name VARCHAR(25), 
    coordinator VARCHAR(20), semester INTEGER, is_Core BIT, course_Language VARCHAR(10), is_Obligatory BIT, resources VARCHAR(50), lecturer_Email VARCHAR(30), 
    PRIMARY KEY (course_ID), UNIQUE (course_Name, objective), FOREIGN KEY (lecturer_Email) REFERENCES Lecturers) 

CREATE TABLE Admins(email VARCHAR(30), admin_ID VARCHAR(7), is_Admin BIT, 
    PRIMARY KEY (email), FOREIGN KEY (email) REFERENCES Members, UNIQUE (admin_ID)) 

CREATE TABLE Faculties(email VARCHAR(30), fac_Name VARCHAR(40), field VARCHAR (20), f_Description VARCHAR(80), major_1 VARCHAR(10), 
    major_2 VARCHAR(10), degree_1 VARCHAR(15), degree_2 VARCHAR(15), degree_3 VARCHAR(15) 
    PRIMARY KEY (email, fac_Name), UNIQUE (f_Description), FOREIGN KEY (email) REFERENCES Members) 

CREATE TABLE Guest_Questions(guest_ID VARCHAR(10), date_Of_Quest DATE, question_asked VARCHAR(50), number_Of_Questions INTEGER, 
    PRIMARY KEY (guest_ID)) 

CREATE TABLE Course_Assesments(a_Type VARCHAR(15), a_Weight REAL, course_ID VARCHAR(7), student_Email VARCHAR(30), 
    lecturer_Email VARCHAR(30), 
    PRIMARY KEY (a_Type, student_Email, lecturer_Email), FOREIGN KEY (student_Email) REFERENCES Students, 
    FOREIGN KEY (lecturer_Email) REFERENCES Lecturers) 

CREATE TABLE Questionaires(q_ID VARCHAR(5), admin_Email VARCHAR(30), student_Email VARCHAR(30), 
    PRIMARY KEY (q_ID), FOREIGN KEY (admin_Email) REFERENCES Admins, FOREIGN KEY (student_Email) REFERENCES Students) 

CREATE TABLE Course_Surveys(course_ID VARCHAR(10), iD VARCHAR(5), student_Email VARCHAR(30), 
    PRIMARY KEY (course_ID), FOREIGN KEY (course_ID) REFERENCES Courses, 
    FOREIGN KEY (iD) REFERENCES Questionaires, 
    FOREIGN KEY (student_Email) REFERENCES Students) 

CREATE TABLE Graduation_Survey(iD VARCHAR(5), student_Email VARCHAR(30), 
    PRIMARY KEY (iD), FOREIGN KEY (iD) REFERENCES Questionaires, FOREIGN KEY (student_Email) REFERENCES Students) 

CREATE TABLE Satisfactory_Surveys(iD VARCHAR(5), student_Email VARCHAR(30), 
    PRIMARY KEY (iD), FOREIGN KEY (iD) REFERENCES Questionaires, FOREIGN KEY (student_Email) REFERENCES Students) 



CREATE TABLE Registers(student_Email VARCHAR(30), course_ID VARCHAR(10), is_approved BIT, 
    PRIMARY KEY (student_Email, course_ID), FOREIGN KEY (student_Email) REFERENCES Students, 
    FOREIGN KEY (course_ID) REFERENCES Courses) 

CREATE TABLE Asses(a_Type VARCHAR(15), student_Email VARCHAR(30), course_ID VARCHAR(10), 
    PRIMARY KEY (a_Type, student_Email, course_ID), 
    FOREIGN KEY (a_Type) REFERENCES Course_Assesments, 
    FOREIGN KEY (student_Email) REFERENCES Students, 
    FOREIGN KEY (course_ID) REFERENCES Courses) 

CREATE TABLE CheckResults(email VARCHAR(30), iD VARCHAR(5), course_ID VARCHAR(10), 
    PRIMARY KEY (email, iD, course_ID), 
    FOREIGN KEY (email) REFERENCES Lecturers, 
    FOREIGN KEY (iD) REFERENCES Course_Surveys, 
    FOREIGN KEY (course_ID) REFERENCES Course_Surveys) 

답변

0

:

CREATE TABLE Course_Assesments 
(  a_Type   VARCHAR(15), 
     a_Weight  REAL, 
     course_ID  VARCHAR(7), 
     student_Email VARCHAR(30), 
     lecturer_Email VARCHAR(30), 
    PRIMARY KEY (a_Type, student_Email, lecturer_Email), 
    FOREIGN KEY (student_Email) REFERENCES Students, 
    FOREIGN KEY (lecturer_Email) REFERENCES Lecturers 
) 

CREATE TABLE Asses 
(  a_Type   VARCHAR(15), 
     student_Email VARCHAR(30), 
     course_ID  VARCHAR(10), 
    PRIMARY KEY (a_Type, student_Email, course_ID), 
    FOREIGN KEY (a_Type) REFERENCES Course_Assesments, 
    FOREIGN KEY (student_Email) REFERENCES Students, 
    FOREIGN KEY (course_ID) REFERENCES Courses 
) 

당신은 Asses.a_Type 그러나 Course_Assesments의 기본 키와 동일하다는 데이터베이스를 말하고있다 course_assesments의 기본 키는 하나의 열이 3 열의 튜플과 같을 수 없기 때문에 오류가 발생하여 3 열 (a_Type, student_Email, lecturer_Email)로 구성됩니다. 당신이 정말로 Course_Assesments를 참조 Asses을 원하는 경우에

는이 같은 테이블이 필요합니다 질문에 관련이없는, 마지막으로

CREATE TABLE Asses 
(  a_Type   VARCHAR(15), 
     student_Email VARCHAR(30), 
     lecturer_Email VARCHAR(30), 
     course_ID  VARCHAR(10), 
    PRIMARY KEY (a_Type, student_Email, course_ID), 
    FOREIGN KEY (a_Type, Student_Email, lecturer_Email) REFERENCES Course_Assesments (a_Type, Student_Email, lecturer_Email), 
    FOREIGN KEY (student_Email) REFERENCES Students, 
    FOREIGN KEY (course_ID) REFERENCES Courses 
) 

을, 당신이 잘못 전반에 걸쳐 평가를 철자 한이 모든 차이를 만들 수 있지만하지 않습니다 다른 사람들이 데이터베이스를 사용하는 데있어 매우 불만 스럽습니다. 예를 들어, Invalid Object Name Course_Assessment과 같은 오류 메시지를받습니다. 직관적으로 철저한 평가를하기 때문에 직관적으로 철자가 정확합니다 (필자는 Received as Recieved라는 철자가있는 데이터베이스를 처리 했으므로 열 이름의 출현 횟수가 절반 정도였습니다. 거의 매일)

관련 문제