2016-06-15 2 views
1

저는 온라인 차량 데이터베이스 시스템을 구축하려고 MySQL과 협력 중입니다. 이를 위해 저는 차량과 소유주라는 두 개의 테이블을 만들었습니다.다른 테이블의 여러 행을 참조하는 외래 키

create table vehicles 
(
    v_id int AUTO_INCREMENT PRIMARY KEY, 
    v_reg_number varchar(255) unique, 
    v_engine_number varchar(255) unique, 
    v_chassis_number varchar(255) unique, 
    v_type varchar(255), 
    v_manufacturer varchar(255), 
    v_model_year varchar(255), 
    v_power varchar(255), 
    v_origin varchar(255) 
) 

create table owners 
(
    o_id int AUTO_INCREMENT PRIMARY KEY, 
    v_id int, 
    o_name varchar(255), 
    o_father_name varchar(255), 
    o_cnic varchar(255) unique, 
    o_dob varchar(255), 
    o_gender varchar(255), 
    FOREIGN KEY(v_id) REFERENCES vehicles(v_id) 
) 

한 명의 소유자가 자신의 이름으로 등록 된 차량이 더 많을 수 있습니다. 제 질문은 vehicles 테이블을 참조하는 여러 ID를 owners.v_id에 저장하는 방법입니다.

+0

외래 키는 단일 행을 충족해야합니다. 그리고 귀하의 데이터는 CSV 데이터가 비정규 화되고 다중 가치로 미친 듯이 정돈되어서는 안됩니다. 뒤로 물러서서 끔찍한 시스템을 만들지 않고 성취하려는 것을 생각해보십시오. – Drew

답변

1

이에 대한 일반적인 솔루션은 교차 테이블을 생성하는 것입니다 : 당신은 다음 owners에서 v_id 드롭

CREATE TABLE vehicles_owned 
(
    o_id INT, 
    v_id INT, 
    PRIMARY KEY (o_id, v_id), 
    FOREIGN KEY (o_id) 
    REFERENCES owners (o_id), 
    FOREIGN KEY (v_id) 
    REFERENCES vehicles (v_id) 
); 

.

이 표는 각 owner이 복수 vehicles을 소유하고 각각 vehicle이 복수 owners을 소유 할 수 있도록합니다. 자동차 당 한 명의 소유주를 적용하려면 UNIQUE 색인을 vehicles_owned.v_id에 추가하십시오.

편집 : 당연히 자동차 당 한 명의 소유자 제한을 적용하려는 경우 o_idvehicles에 외래 키로 추가하고 교차 테이블을 신경 쓰지 않아도됩니다.

관련 문제