外键引用另一个表中的多行

时间:2016-06-15 03:38:36

标签: mysql foreign-keys

我正在使用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中?

1 个答案:

答案 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作为外键,而不是打扰交叉点表