Połączenia to sposób działania relacyjnych DBMS. Dowiedz się więcej o normalizacji i korzystaj z niej.
Jeśli tak jest w przypadku każdej usługi, Twoja baza danych podlega ograniczeniu. Chodzi o to, że (select service from Service_has_transaction join Transaction_has_wallet)
jest podzbiorem (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
.
Większość DBMS SQL nie pozwala na deklaratywne wyrażenie tego ograniczenia i nie wie, jak zoptymalizować jego egzekwowanie. Istnieje jednak idiom SQL, którego możemy użyć do wyrażenia i wymuszenia go deklaratywnie. (Zgadywanie definicji tabeli:) Najpierw dodaj bonus
kolumna do Transaction_has_wallet
i klucz obcy z Transaction_has_wallet (wallet, bonus)
do Wallet_has_bonus
. Następnie dodaj kolumny portfela i bonusów do Service_has_transaction
oraz klucz obcy z Service_has_transaction (transaction, wallet, bonus)
do Transaction
. Powoduje to dodanie nadmiarowych kolumn, ale mimo to ogranicza bazę danych do prawidłowych stanów, ponieważ ograniczenia klucza obcego zapobiegają błędnym wartościom nadmiarowym. (Mam nadzieję, że jest to motywujący przykład do nauki wyrażania arbitralnych ograniczeń za pomocą wyzwalaczy).