Las uniones son cómo funcionan los DBMS relacionales. Aprenda y use la normalización.
Si esto es cierto para todos los servicios, su base de datos está sujeta a una restricción. Es eso (select service from Service_has_transaction join Transaction_has_wallet)
es un subconjunto de (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
.
La mayoría de los DBMS de SQL no le permiten expresar esa restricción de forma declarativa y no saben cómo optimizar su aplicación. Sin embargo, hay un modismo de SQL que podemos usar para expresarlo y aplicarlo de forma declarativa. (Adivinando las definiciones de su tabla :) Primero agregue un bonus
columna a Transaction_has_wallet
y una clave externa de Transaction_has_wallet (wallet, bonus)
a Wallet_has_bonus
. Luego agregue las columnas de billetera y bonificación a Service_has_transaction
y una clave externa de Service_has_transaction (transaction, wallet, bonus)
a Transaction
. Esto agrega columnas redundantes pero, sin embargo, limita la base de datos a estados válidos porque las restricciones de clave externa evitan que los valores redundantes sean incorrectos. (Con suerte, este es un ejemplo motivador para aprender a expresar restricciones arbitrarias a través de activadores).