如何确保多对多关系具有相同的外键
How to ensure many to many relationship has the same foreign key
如何确保shop_has_producttable来自同一家公司?有没有办法实现这个是RDBMS还是我需要在应用层编写插入逻辑。
感谢您的宝贵时间。
在 MySQL 中,您可以使外键引用所引用 table 的任何 KEY,而不仅仅是主键。因此,在每个 table.
中使用 company_id
在 id
上创建一个 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)
);
如何确保shop_has_producttable来自同一家公司?有没有办法实现这个是RDBMS还是我需要在应用层编写插入逻辑。
感谢您的宝贵时间。
在 MySQL 中,您可以使外键引用所引用 table 的任何 KEY,而不仅仅是主键。因此,在每个 table.
中使用company_id
在 id
上创建一个 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)
);