0

多数の顧客が使用するシステムを想像してください。各顧客には、多数の製品と多数のユーザーがあります。これは、次の 3 つのテーブルとして簡単に表すことができます。

           +-----------+
    +------+ CUSTOMER  +-------+
    |      +-----------+       |
   /|\                        /|\
+------+                  +---------+
| USER |                  | PRODUCT |
+------+                  +---------+

ここで、顧客のユーザーがその顧客の製品のサブセットのみを使用できるように指定します。これは、次の 4 つのテーブルとして表すことができます。

           +-----------+
    +------+ CUSTOMER  +-------+
    |      +-----------+       |
   /|\                        /|\
+------+                  +---------+
| USER |                  | PRODUCT |
+---+--+                  +----+----+
    |       +---------+        |
    +------<+ CAN USE +>-------+
            +--------++

ただし、これは、ある顧客に属するユーザーと別の顧客に属する製品との間に結合が存在しないことを保証するには十分ではありません。

これは、コードまたはトリガーを介して制限できます (結合を追加するときは、ユーザーの顧客が製品の顧客と一致することを確認してください)。または、無効な結合エントリを追加することを気にすることさえできませんが、クエリを実行して有効なエントリのみを返すように注意する必要があります。

しかし、テーブルの関係 (外部キーなど) を使用してこの制限を表す方法はありますか?

4

2 に答える 2

1

はい、テーブルを追加する必要がありCompanyます。、複合主キーおよびを使用User-Companyして、多対 1のテーブルを作成します。次に、、、およびを複合外部キーでテーブルに、単一列の外部キーをテーブルに含むように、テーブルを変更します。UserUserCompanyCan useUserCompanyProductUserCompanyUser-CompanyProductProduct


履歴のために上記を残しますが、質問を編集したので、以下を調べてください。

        +------+     +----------+     +---------+
        | USER |     | Customer |     | PRODUCT |
        +------+     +----------+     +---------+
             \        /        \         /
              |      |          |       |
             /|\    /|\        /|\     /|\
            +-----------+      +-----------+     
            | Cust-USER |      | Cust-Prod |     
            +-----------+      +-----------+     
      Comp FK         \         /      Comp FK 
      (Cust, User) --  |       |  --- (Cust, Prod)
                      /|\     /|\
                    +-------------+  
                    | Can Use     |  
                    |  - customer |
                    |  - product  |
                    |  - user     |
                    +-------------+     
于 2013-10-04T12:57:09.180 に答える