복붙노트

[SQL] 외래 키 등을 사용하여 복합 기본 키

SQL

외래 키 등을 사용하여 복합 기본 키

어떻게 외부 키로 복합 기본 키를 사용할 수 있습니까? 내 시도가 작동하지 않는 것 같습니다.

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) )

해결법

  1. ==============================

    1.라인 :

    라인 :

    FOREIGN KEY (pk_studentID ) REFERENCES student(pk_studentID ),
    

    잘못된 것입니다. 이 부모 테이블의 PK 제약 조건의 이름 만입니다, 그런 pk_studentID을 사용할 수 없습니다. 화합물 외래 키 등 기본 키를 사용하려면, 당신은 자식 테이블에 같은 데이터 유형과 동일한 수의 열을합니다 (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 ;
    
  2. from https://stackoverflow.com/questions/10565846/use-composite-primary-key-as-foreign-key by cc-by-sa and MIT license