2012-05-12 42 views
6

複合主キーを外部キーとして使用するにはどうすればよいですか?私の試行はうまくいかないようです。複合主キーを外部キーとして使用

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

質問がありますか? –

+3

外部キーとして複合主キーを使用する方法 – comsian

+1

@Paul Bellora質問を追加しました。 – 71GA

答えて

30

ライン:

FOREIGN KEY (pk_studentID) REFERENCES student(pk_studentID), 

が間違っています。 pk_studentIDのように使用することはできません。これは、親テーブルのPK制約の名前に過ぎません。コンパウンド主キーを外部キーとして使用するには、同じデータ型を持つ同じ数の列(PKを構成する列)を子テーブルに追加し、次にFOREIGN KEY定義のこれらの列の組み合わせを使用する必要があります:

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

あなたは私の問題をsove ... thnx – comsian

+1

また、順序は重要です。 – Jus12

+0

あなたは私に悩みのロット*を保存しました。これはドキュメントからはっきりと分かりません。ありがとう! –

関連する問題