#mysql #sql #rdbms
#mysql #sql #rdbms
Вопрос:
Как я могу гарантировать, что таблица shop_has_product принадлежит той же компании? Есть ли способ добиться этого с помощью СУБД или мне нужно написать логику вставки на прикладном уровне.
Спасибо вам за ваше время.
Ответ №1:
В MySQL вы можете создать ссылку на внешний ключ на любой КЛЮЧ таблицы, на которую ссылается ссылка, а не только на первичный ключ. Поэтому создайте КЛЮЧ поверх id
с company_id
в каждой таблице.
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)
);
Затем добавьте company_id
столбец в таблицу «многие ко многим» и используйте один и тот же столбец в двух внешних ключах, по одному для каждой из вышеупомянутых таблиц. Естественно, 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)
);