Съединенията са начинът, по който работят релационните СУБД. Научете за и използвайте нормализирането.
Ако това е вярно за всяка услуга, вашата база данни е обект на ограничение. Това е, че (select service from Service_has_transaction join Transaction_has_wallet)
е подмножество от (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
.
Повечето SQL СУБД не ви позволяват да изразите това ограничение декларативно и не знаят как да оптимизирате прилагането му. Въпреки това има SQL идиом, който можем да използваме, за да го изразим и наложим декларативно. (Познавайки дефинициите на вашата таблица:) Първо добавете bonus
колона към Transaction_has_wallet
и външен ключ от Transaction_has_wallet (wallet, bonus)
до Wallet_has_bonus
. След това добавете колони портфейл и бонус към Service_has_transaction
и външен ключ от Service_has_transaction (transaction, wallet, bonus)
към Transaction
. Това добавя излишни колони, но въпреки това ограничава базата данни до валидни състояния, тъй като ограниченията на външния ключ не позволяват на излишните стойности да бъдат грешни. (Надяваме се, че това е мотивиращ пример за изучаване на изразяване на произволни ограничения чрез тригери.)