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 ответов

33 просмотра

Триггер или констрейнт (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

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

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

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
Карта сайта