これは具体的な答えですが、これを設計するときに考慮できるいくつかの側面があります。
共有情報に関して、ここで最も重要なことは、お客様と、各お客様が他のお客様に対して持つ役割や権利との関係を定義することだと思います。最善のアプローチは、何ができるかを正確に特定することから始めることです。
例:
Read Only|cust1|cust2|cust3
---------+-----+-----+-----
customer1| 1 | 1 | 0
customer2| 0 | 1 | 0
customer3| 1 | 0 | 1
Write |cust1|cust2|cust3
---------+-----+-----+-----
customer1| 1 | 1 | 0
customer2| 0 | 1 | 0
customer3| 0 | 0 | 1
したがって、上記では、customer1はcustomer2のデータの読み取りと書き込み(更新)を行うことができます。
そうは言っても、主な問題はこれらの関係、つまり共有情報をモデル化することです。@TFDの提案を使用すると、顧客が関連するテナントIDとともにログオンしたときに、これらの関係をセッションにロードできます。
(提供された情報に基づくと、これはアプリケーションごとの懸念であり、顧客だけの懸念ではない可能性があります。これを説明するために、上記の表の「cust」の値をに置き換えてApp
ください。)
機能は共有されていますが、アプリケーションごとに固有の目的があると想定しているため、アプリケーションごとに個別のサイトを作成します。
他のデータ間の関係がある場合は、別の構成DBが必要になる可能性があります。DBは、各アプリのすべてのテナント情報(他のアプリとの関係を含む)を保存します。この提案の理由は、私が見ることができることから、共有DBアプローチを使用して互いに独立した3つの別々のマルチテナントアプリがあるためです-しかし、各アプリはあるレベルで別のアプリと対話する必要があります。
DB内の顧客に関しては、「Customers」テーブルをConfigDBに限定することをお勧めします。その後、各アプリケーションの要件に基づいてコンテンツDBを作成できます。