Bergabung adalah cara kerja DBMS relasional. Pelajari dan gunakan normalisasi.
Jika ini berlaku untuk setiap layanan, maka basis data Anda tunduk pada batasan. Itu adalah (select service from Service_has_transaction join Transaction_has_wallet)
adalah bagian dari (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
.
Sebagian besar DBMS SQL tidak mengizinkan Anda mengungkapkan batasan itu secara deklaratif dan tidak tahu cara mengoptimalkan penerapannya. Namun ada idiom SQL yang dapat kita gunakan untuk mengekspresikan &menegakkannya secara deklaratif. (Tebak definisi tabel Anda :) Pertama tambahkan bonus
kolom ke Transaction_has_wallet
dan kunci asing dari Transaction_has_wallet (wallet, bonus)
ke Wallet_has_bonus
. Kemudian tambahkan kolom dompet &bonus ke Service_has_transaction
dan kunci asing dari Service_has_transaction (transaction, wallet, bonus)
ke Transaction
. Ini menambahkan kolom yang berlebihan tetapi tetap membatasi database ke status yang valid karena batasan kunci asing mencegah nilai yang berlebihan menjadi salah. (Semoga ini adalah contoh motivasi untuk belajar mengekspresikan batasan sewenang-wenang melalui pemicu.)