我正在使用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 :(得分:1)
通常的解决方案是创建交叉表:
[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding])
然后从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
作为外键,而不是打扰交叉点表