2016-06-15 22 views
1

私はMySQLと協力してオンライン車両データベースシステムを構築しようとしています。この目的のために、私は2つのテーブルを作成しました:車両と所有者。別のテーブルの複数の行を参照する外部キー

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

したがって、1人の所有者が自分の名前に登録されている車両の台数を増やしている可能性があります。私の質問は、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を持っています。 1車両あたり1オーナー制限を適用する場合は、UNIQUEインデックスをvehicles_owned.v_idに追加します。

編集:もちろん、オーナーごとに1人の所有者の制約を適用する場合は、vehicleso_idを外部キーとして追加するだけで、交差テーブルを気にする必要はありません。

関連する問題