如何确保多对多关系具有相同的外键

How to ensure many to many relationship has the same foreign key

如何确保shop_has_producttable来自同一家公司?有没有办法实现这个是RDBMS还是我需要在应用层编写插入逻辑。

感谢您的宝贵时间。

在 MySQL 中,您可以使外键引用所引用 table 的任何 KEY,而不仅仅是主键。因此,在每个 table.

中使用 company_idid 上创建一个 KEY
CREATE TABLE company (
 id INT PRIMARY KEY,
 name VARCHAR(45)
);

CREATE TABLE product (
 id INT PRIMARY KEY,
 company_id INT NOT NULL,
 KEY (id, company_id),
 FOREIGN KEY (company_id) REFERENCES company(id)
);
    
CREATE TABLE shop (
 id INT PRIMARY KEY,
 name VARCHAR(45),
 company_id INT NOT NULL,
 KEY (id, company_id),
 FOREIGN KEY (company_id) REFERENCES company(id)
);

然后在many-to-many table 中添加一个company_id 列,并在两个外键中使用相同的列,每个外键对应上述table。当然,company_id 必须在给定行的两个外键中具有相同的值。

 CREATE TABLE shop_has_product (
 shop_id INT NOT NULL,
 product_id INT NOT NULL,
 company_id INT NOT NULL,
 PRIMARY KEY (shop_id, product_id),
 FOREIGN KEY (shop_id, company_id) REFERENCES shop(id, company_id),
 FOREIGN KEY (product_id, company_id) REFERENCES product(id, company_id)
);