2012-05-12 8 views
6

Wie kann ich einen zusammengesetzten Primärschlüssel als Fremdschlüssel verwenden? Es sieht so aus, als ob mein Versuch nicht funktioniert.Verwenden Sie zusammengesetzten Primärschlüssel als Fremdschlüssel

create table student 
(
student_id varchar (25) not null , 
student_name varchar (50) not null , 
student_pone int , 
student_CNIC varchar (50), 
students_Email varchar (50), 
srudents_address varchar(250), 
dept_id varchar(6), 
batch_id varchar(4), 
FOREIGN KEY (dept_id) REFERENCES department(dept_id), 
FOREIGN KEY (batch_id) REFERENCES batch(batch_id), 
CONSTRAINT pk_studentID PRIMARY KEY (batch_id,dept_id,student_id)) 

create table files 
(
files_name varchar(50) not null , 
files_path varchar(50), 
files_data varchar(max), 
files_bookmarks xml , 
FOREIGN KEY (pk_studentID) REFERENCES student(pk_studentID), 
CONSTRAINT pk_filesName PRIMARY KEY (files_name)) 
+5

Gibt es eine Frage? –

+3

Verwenden von Composite Primärschlüssel als Fremdschlüssel – comsian

+1

@Paul Bellora Ich habe die Frage hinzugefügt. – 71GA

Antwort

30

Die Linie:

FOREIGN KEY (pk_studentID) REFERENCES student(pk_studentID), 

ist falsch. Sie können pk_studentID nicht so verwenden, dies ist nur der Name der PK-Einschränkung in der übergeordneten Tabelle. Um einen zusammengesetzten Primärschlüssel als Fremdschlüssel zu verwenden, müssen Sie dieselbe Anzahl von Spalten (die die PK bilden) mit denselben Datentypen zur untergeordneten Tabelle hinzufügen und dann die Kombination dieser Spalten in der FOREIGN KEY Definition verwenden:

CREATE TABLE files 
(
    files_name varchar(50) NOT NULL, 

    batch_id varchar(4) NOT NULL,   --- added, these 3 should not 
    dept_id varchar(6) NOT NULL,   --- necessarily be NOT NULL 
    student_id varchar (25) NOT NULL,  --- 

    files_path varchar(50), 
    files_data varchar(max),    --- varchar(max) ?? 
    files_bookmarks xml,     --- xml ?? 
             --- your question is tagged MySQL, 
             --- and not SQL-Server 

    CONSTRAINT pk_filesName 
    PRIMARY KEY (files_name), 

    CONSTRAINT fk_student_files      --- constraint name (optional) 
    FOREIGN KEY (batch_id, dept_id, student_id) 
     REFERENCES student (batch_id, dept_id, student_id) 
) ENGINE = InnoDB ; 
+0

Sie sove mein Problem ... thnx – comsian

+1

Auch die Reihenfolge ist wichtig. – Jus12

+0

Sie haben mir eine Menge Ärger erspart; das ist wirklich nicht klar aus den Dokumenten. Vielen Dank! –

Verwandte Themen