sql >> Base de Datos >  >> RDS >> Mysql

Almacenamiento de claves foráneas redundantes para evitar uniones

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).