多数の顧客が使用するシステムを想像してください。各顧客には、多数の製品と多数のユーザーがあります。これは、次の 3 つのテーブルとして簡単に表すことができます。
+-----------+
+------+ CUSTOMER +-------+
| +-----------+ |
/|\ /|\
+------+ +---------+
| USER | | PRODUCT |
+------+ +---------+
ここで、顧客のユーザーがその顧客の製品のサブセットのみを使用できるように指定します。これは、次の 4 つのテーブルとして表すことができます。
+-----------+
+------+ CUSTOMER +-------+
| +-----------+ |
/|\ /|\
+------+ +---------+
| USER | | PRODUCT |
+---+--+ +----+----+
| +---------+ |
+------<+ CAN USE +>-------+
+--------++
ただし、これは、ある顧客に属するユーザーと別の顧客に属する製品との間に結合が存在しないことを保証するには十分ではありません。
これは、コードまたはトリガーを介して制限できます (結合を追加するときは、ユーザーの顧客が製品の顧客と一致することを確認してください)。または、無効な結合エントリを追加することを気にすることさえできませんが、クエリを実行して有効なエントリのみを返すように注意する必要があります。
しかし、テーブルの関係 (外部キーなど) を使用してこの制限を表す方法はありますか?