sql >> Databasteknik >  >> RDS >> Mysql

Lagring av redundanta främmande nycklar för att undvika anslutningar

Joins är hur relationella DBMS fungerar. Lär dig mer om och använd normalisering.

Om detta är sant för varje tjänst är din databas föremål för en begränsning. Det är det (select service from Service_has_transaction join Transaction_has_wallet) är en delmängd av (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus) .

De flesta SQL DBMS låter dig inte uttrycka den begränsningen deklarativt och vet inte hur du ska optimera genomdrivandet av den. Men det finns ett SQL-idiom som vi kan använda för att uttrycka och genomdriva det deklarativt. (Gissa på dina tabelldefinitioner:) Lägg först till en bonus kolumnen till Transaction_has_wallet och en främmande nyckel från Transaction_has_wallet (wallet, bonus) till Wallet_has_bonus . Lägg sedan till kolumner för plånbok och bonus i Service_has_transaction och en främmande nyckel från Service_has_transaction (transaction, wallet, bonus) till Transaction . Detta lägger till redundanta kolumner men begränsar ändå databasen till giltiga tillstånd eftersom de främmande nyckelbegränsningarna förhindrar att de redundanta värdena är felaktiga. (Förhoppningsvis är detta ett motiverande exempel för att lära sig att uttrycka godtyckliga begränsningar via triggers.)




  1. Hur man läser versionsnummer från en databasfil i Android som placeras i tillgångsmappen

  2. PostgreSQL:standardnamn för begränsningar

  3. Hur betraktar NULL som MAX-datumet istället för att ignorera det i MySQL?

  4. jqGrid Act Strange Laddar om data efter infogning och uppdatering