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