sql >> Database teknologi >  >> RDS >> Mysql

Lagring af redundante fremmednøgler for at undgå joins

Joins er, hvordan relationelle DBMS'er fungerer. Lær om og brug normalisering.

Hvis dette er sandt for hver tjeneste, er din database underlagt en begrænsning. Det er den (select service from Service_has_transaction join Transaction_has_wallet) er en delmængde af (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus) .

De fleste SQL DBMS'er lader dig ikke udtrykke denne begrænsning deklarativt og ved ikke, hvordan du optimerer håndhævelsen af ​​den. Men der er et SQL-formsprog, som vi kan bruge til at udtrykke og håndhæve det deklarativt. (Gætter på dine tabeldefinitioner:) Tilføj først en bonus kolonne til Transaction_has_wallet og en fremmednøgle fra Transaction_has_wallet (wallet, bonus) til Wallet_has_bonus . Tilføj derefter tegnebogs- og bonuskolonner til Service_has_transaction og en fremmednøgle fra Service_has_transaction (transaction, wallet, bonus) til Transaction . Dette tilføjer redundante kolonner, men begrænser ikke desto mindre databasen til gyldige tilstande, fordi begrænsningerne for fremmednøgle forhindrer, at de redundante værdier er forkerte. (Forhåbentlig er dette et motiverende eksempel til at lære om at udtrykke vilkårlige begrænsninger via triggere.)




  1. mysql skelner mellem store og små bogstaver i utf8_general_ci

  2. Hvordan arbejder man med PGpoint for Geolocation ved hjælp af PostgreSQL?

  3. SQL-forespørgsel i FB JavaScript

  4. Hvordan MONTHNAME() virker i MariaDB