Spojení jsou způsob, jakým fungují relační DBMS. Přečtěte si o normalizaci a používejte ji.
Pokud to platí pro každou službu, pak vaše databáze podléhá omezení. Jde o to, že (select service from Service_has_transaction join Transaction_has_wallet)
je podmnožinou (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
.
Většina SQL DBMS vám nedovolí vyjádřit toto omezení deklarativně a neví, jak optimalizovat jeho vynucení. Existuje však idiom SQL, který můžeme použít k vyjádření a deklarativnímu vynucení. (Hádejte podle definic stolu:) Nejprve přidejte bonus
do Transaction_has_wallet
a cizí klíč z Transaction_has_wallet (wallet, bonus)
na Wallet_has_bonus
. Poté přidejte sloupce peněženky a bonusů do Service_has_transaction
a cizí klíč z Service_has_transaction (transaction, wallet, bonus)
do Transaction
. To přidává redundantní sloupce, ale přesto omezuje databázi na platné stavy, protože omezení cizího klíče brání tomu, aby byly redundantní hodnoty nesprávné. (Doufáme, že toto je motivační příklad pro učení o vyjádření libovolných omezení pomocí spouštěčů.)