Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Armazenando chaves estrangeiras redundantes para evitar junções


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