72 похожих чатов

Всем привет Есть вопрос по проектированию. Пусть у меня есть таблицы Alpha,

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)

Можно ли как-то от СУБД получить такие гарантии?
Или хотя бы как загуглить, что я хочу)

11 ответов

8 просмотров

Триггер или констрейнт (check), если база поддерживает Но зачем это делать в базе, а не приложении?

Nikita- Автор вопроса
Etki
Триггер или констрейнт (check), если база поддержи...

Триггеру я предпочту решение на стороне приложения Но вдруг это можно как-то на ключах сделать. Или сама ситуация хорошо известна и есть паттерн. Или это известный признак какой-то проблемы Мне просто не нравится, что вроде как ограничение со стороны данных, но контроль целостности размазывается. Например, при изучении БД такое ограничение фиг предположишь

Etki
Триггер или констрейнт (check), если база поддержи...

А как это может выглядеть как check constraint?

Для этого не нужно никаких ограничений, лишь not null на поле Alpha.charlie_id и foreign key

Nikita- Автор вопроса
Ilya Zviagin
Для этого не нужно никаких ограничений, лишь not n...

тогда у меня может быть Alpha.charlie_id not in (charlie.id from alpha join bravo join charlie)

Nikita- Автор вопроса

гарантирует только то, что Alpha.charlie_id будет в Charlie Или я чего-то не понимаю?

Nikita- Автор вопроса
Ilya Zviagin
А тебе то что надо ещё?

Чтобы вот так: https://t.me/dba_ru/169372 — нельзя было

Nikita- Автор вопроса
Ilya Zviagin
За bravo другой fk отвечает

И он никак не повлияет на Alpha.charlie_id

Похожие вопросы

Обсуждают сегодня

Всем добрый вечер. Нужна помощь с прикруткой telegram-vapor-bot к проекту Vapor. Удалось после старта приложения отправить тестовое сообщение в бот, вот только сразу после это...
advanc3d
3
вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
Всем привет! Может кто поможет разобраться с чёрной магией? (во всяком случае для меня) Дело вот в чём - написал я код для общения с tmc2209 драйвером по half duplex uart. М...
pronvis
4
Всем привет, а может кто-то подсказать какие-то советы или типо того, как оптимальнее всего сапортить сервисы в разных локациях (канада + австралия + евпропа)? Будет ли ошибк...
Stas
8
Кто что использует для создания приложения/бэка обработки видеопотока в реальном времени? FFmpeg или GStreamer? По моему небольшому опыту, первый лучше и гибче. Но почему-то...
Georgy Makarov
5
Всем привет! Слушаем rtsp пото с одной камеры приходят серые кадры как будто не прогруженные (не все, но их большинство) в чем может быть проблема?
Evgeniy
3
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Это что теперь, любой бот сможет принимать платежи без ебли с юр лицами?
Lencore
8
как через magic forms посылать мультиязычные имейлы?
Sergei Toroptsev
4
Не догоняю немного каким боком тут эппл Вот есть веб (мини) апп, который по факту веб сайт, просто в телеге веб вью и если там оплата, то нежно вот эти приседания?
e\\/gen
7
Карта сайта