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

问题描述 投票:1回答: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)
)

因此,一个车主可能会以他的名义登记更多车辆。我的问题是如何将多个ID(引用vehicles表)保存在owners.v_id中?

mysql foreign-keys
1个回答
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)
);

然后你从v_id下降owners

这个表允许每个owner拥有多个vehicles,每个vehicle有多个owners。如果要强制执行每车辆一个拥有者约束,请将UNIQUE索引添加到vehicles_owned.v_id

编辑:当然,如果你想强制执行每车主一个约束,你也可以简单地将o_id添加到vehicles作为外键,而不用打扰交叉表。

© www.soinside.com 2019 - 2024. All rights reserved.