2012-05-12 32 views
6

Birleşik bir birincil anahtarı yabancı anahtar olarak nasıl kullanabilirim? Benim denemem işe yaramaz gibi görünüyor. Kompozit Birincil Anahtarı Yabancı Anahtar Olarak Kullan

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

Bir soru var mı? –

+3

Yabancı Anahtar Olarak Kompozit Birincil Anahtar Nasıl Kullanılır – comsian

+1

@Paul Bellora Soruyu ekledim. – 71GA

cevap

30

hattı:

FOREIGN KEY (pk_studentID) REFERENCES student(pk_studentID), 

yanlıştır. pk_studentID'u bu şekilde kullanamazsınız, bu yalnızca üst tablodaki PK kısıtlamasının adıdır. Birleşik Birincil Anahtar'ı Yabancı Anahtar olarak kullanmak için, alt-tablodaki aynı veri tipleriyle (PK'yi oluşturan) aynı sayıda sütun eklemeniz ve daha sonra bu sütunların birleşimini FOREIGN KEY tanımında kullanmanız gerekir:

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

benim sorunumu çözüyorsun ... thnx – comsian

+1

Ayrıca, sipariş önemlidir. – Jus12

+0

Bana bir * lot * sorun yarattın; Bu gerçekten dokümanlardan net değil. Teşekkürler! –

İlgili konular