@hrvasiliy

Как сделать составной внешний ключ?

Пытаюсь реализовать связь между типами транспорта с использованием внешних ключей. В чем загвоздка? - В том, что на данный момент предки ссылаются на потомка, получается, что у одного потомка 4 родителя - что является бредом. И что интересно MySQL Workbench разрешает построить такую диаграмму. Родитель должен как-то учитывать тип транспорта, чтобы при изменении ID родителя изменялись именно те ID, которые соответствуют типу. Не могу понять, как это сделать.

OG1vUJs.png
  • Вопрос задан
  • 11351 просмотр
Пригласить эксперта
Ответы на вопрос 2
Vestail
@Vestail
Software Engineer
Как вам такое?
SAl4gzo.png
И вы уверены в том что разные виды транспорта стоит разносить по разным таблицам? Если их поля не будут особо отличатся, можно подумать о том как соединить все в одну таблицу.
Ответ написан
mahoho
@mahoho
Full stack certified PHP developer.
Указанная вами схема не может быть реализована через FOREIGN KEY, можно через триггеры на таблицах "родителей". Либо я бы рекомендовал поместить всех родителей и их типы (если я все правильно понял и это их типы) в одну таблицу с примерно такой схемой:

CREATE TABLE trasports (
id INT UNSIGNED NOT NULL,
type INT UNSIGNED NOT NULL,

PRIMARY KEY (id, type)
FOREIGN KEY (type) REFERENCES transport_type (id)
);

И внешний ключ в user_transport делать по двум полям:
ALTER TABLE user_transport ADD FOREIGN KEY (transport_type, transport_id) REFERENCES trasports (type, id) ON UPDATE CASCADE;

e55c0a54afd64dbe8850965b0911d345.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы