Кардинальность, если отношения зависят от другого - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть таблица, которая связана с двумя другими таблицами, суть в том, что один из двух внешних ключей будет нулевым.

Дело в том, что изображение может принадлежать обработке или клиент и лечение принадлежит клиенту. Проблема в том, что если я только ссылаюсь на клиента, я не знаю, какая картина связана с лечением, а какая нет.

Tables to join

Решение ? :

Solution

Спасибо за любую идею

1 Ответ

1 голос
/ 05 февраля 2020

Одним из способов решения этой проблемы было бы создание отдельных таблиц сопоставления для представления взаимосвязей между, с одной стороны, изображениями и обработками, а с другой стороны - изображениями и клиентами.

create table pictures_treatments(
    idPicture int,
    idTreatment int,
    primay key(idPicture),
    foreign key (idPicture) references t_pictures(idPicture),
    foreign key (idTreatment) references t_treatment(idTreatment)
);

create table pictures_clients(
    idClient int,
    idTreatment int,
    primay key(idPicture),
    foreign key (idPicture) references t_pictures(idPicture),
    foreign key (idClient) references t_client(idClient)
);

При этом после установки вы можете легко восстановить изображение, связанное с лечением или клиентом, с двумя левыми соединениями:

select t.*, p.picPath
from t_treatments t
left join pictures_treatments pt on pt.idTreatment = t.idTreatment
left join t_pictures p on p.idPicture = pt.idPicture;

select c.*, p.picPath
from t_clients t
left join pictures_clients pc on pc.idClient = c.idClient
left join t_pictures p on p.idPicture = pt.idPicture
...