As junções são como os SGBDs relacionais funcionam. Conheça e use a normalização.
Se isso for verdade para todos os serviços, seu banco de dados estará sujeito a uma restrição. É que
(select service from Service_has_transaction join Transaction_has_wallet)
é um subconjunto de (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
. A maioria dos SGBDs SQL não permite que você expresse essa restrição de forma declarativa e não sabe como otimizar sua aplicação. No entanto, existe um idioma SQL que podemos usar para expressá-lo e impô-lo declarativamente. (Adivinhando nas definições da sua tabela:) Primeiro adicione um
bonus
coluna para Transaction_has_wallet
e uma chave estrangeira de Transaction_has_wallet (wallet, bonus)
para Wallet_has_bonus
. Em seguida, adicione as colunas de carteira e bônus a Service_has_transaction
e uma chave estrangeira de Service_has_transaction (transaction, wallet, bonus)
para Transaction
. Isso adiciona colunas redundantes, mas limita o banco de dados a estados válidos porque as restrições de chave estrangeira impedem que os valores redundantes estejam errados. (Espero que este seja um exemplo motivador para aprender a expressar restrições arbitrárias por meio de gatilhos.)