結合は、リレーショナルDBMSが機能する方法です。正規化について学び、使用します。
これがすべてのサービスに当てはまる場合、データベースには制約があります。 (select service from Service_has_transaction join Transaction_has_wallet)
です。 (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
。
ほとんどのSQLDBMSでは、その制約を宣言的に表現することはできず、その強制を最適化する方法もわかりません。ただし、SQLイディオムを使用して、それを宣言的に表現および適用できます。 (テーブル定義を推測する:)最初にbonus
を追加します Transaction_has_wallet
への列 およびTransaction_has_wallet (wallet, bonus)
からの外部キー Wallet_has_bonus
へ 。次に、ウォレットとボーナスの列をService_has_transaction
に追加します およびService_has_transaction (transaction, wallet, bonus)
からの外部キー Transaction
へ 。これにより冗長な列が追加されますが、外部キーの制約により冗長な値が間違っているのを防ぐため、データベースは有効な状態に制限されます。 (うまくいけば、これはトリガーを介して任意の制約を表現することについて学ぶための動機付けの例です。)