我正在使用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)
)
因此,一个车主可能会以他的名义登记更多车辆。我的问题是如何将多个ID(引用vehicles
表)保存在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)
);
然后你从v_id
下降owners
。
这个表允许每个owner
拥有多个vehicles
,每个vehicle
有多个owners
。如果要强制执行每车辆一个拥有者约束,请将UNIQUE
索引添加到vehicles_owned.v_id
。
编辑:当然,如果你想强制执行每车主一个约束,你也可以简单地将o_id
添加到vehicles
作为外键,而不用打扰交叉表。