Bravo и Charlie. Все они связаны друг с другом как один ко многим (1..n). А именно:
Alpha 1..n Bravo
Bravo 1..n Chralie
Charlie 1..n Alpha
То есть у одной Альфы куча Браво, у которых по куче Чарли. Но каждой Альфы не больше одного Чарли.
Я хочу ограничение, такое что Charlie у Alpha была обязательно из тех, что связаны с Bravo, которые связаны с Alpha. То есть, чтобы Charlie у Alpha (Alpha - Charlie) была среди тех, что транзитивно связаны с Alpha (Alpha -< Bravo -< Charlie)
Можно ли как-то от СУБД получить такие гарантии?
Или хотя бы как загуглить, что я хочу)
Триггер или констрейнт (check), если база поддерживает Но зачем это делать в базе, а не приложении?
Триггеру я предпочту решение на стороне приложения Но вдруг это можно как-то на ключах сделать. Или сама ситуация хорошо известна и есть паттерн. Или это известный признак какой-то проблемы Мне просто не нравится, что вроде как ограничение со стороны данных, но контроль целостности размазывается. Например, при изучении БД такое ограничение фиг предположишь
А как это может выглядеть как check constraint?
Для этого не нужно никаких ограничений, лишь not null на поле Alpha.charlie_id и foreign key
тогда у меня может быть Alpha.charlie_id not in (charlie.id from alpha join bravo join charlie)
гарантирует только то, что Alpha.charlie_id будет в Charlie Или я чего-то не понимаю?
А тебе то что надо ещё?
Чтобы вот так: https://t.me/dba_ru/169372 — нельзя было
За bravo другой fk отвечает
И он никак не повлияет на Alpha.charlie_id
Обсуждают сегодня