2016-06-15 71 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) 
) 

所以一個車主可能會有更多的車輛以他的名義註冊。我的問題是,如何將保存在owners.v_id中的多個ID參照vehicles表保存?

+0

外鍵必須滿足單行。而且你的數據不應該讓CSV數據在非規範化和多值化方面受到瘋狂的干擾。退後一步,想想你想要完成的任務,而不會產生一個可怕的系統。 – Drew

回答

1

通常解決這將是創建一個交集表:

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

然後,從owners下降v_id

該表格允許每個owner擁有多個vehicles,並且每個vehicle擁有多個owners。如果要強制實施每車一個車主限制,請在vehicles_owned.v_id上添加一個UNIQUE索引。

編輯:當然,如果你想執行一個車主每車限制,你也可以簡單地將o_id作爲外鍵添加到vehicles,而不用擔心交叉表。

相關問題