マルチテナントシステムを設計しており、共有データベース、スキーマ共有、共有データテーブルを採用したいと考えています。
当社のテナントは、州 (米国の州)、郡、または個々の組織である可能性があるためです。次の図は、概要を示しています。(ここで、O1、O2.. は組織、U1、U2.. はユーザーです)
- 州は、その下に多くの組織を持つことができます。
- 組織は、その下に1 人以上のユーザーになります。
- 組織は、その下に1 つ以上の組織(サブ組織) を持つことができます。
- ある組織のユーザーが他の組織に所属することはできません。
- すべてのテナントには、組織/ユーザーに対して CRUD を実行できる独自の管理者がいます (組織の作成と組織へのユーザーの割り当てなど) 。
- スーパー管理者(当社の) は、任意のテナントをアクティブ化/非アクティブ化できます。
以下は、高レベルの ER 図です。テーブルはテナント間で共有されるため、すべてのテーブルにtenant_id列があります。
組織は組織の下にネストできるため、Discriminator Columnを使用して自己参照テーブルを作成することを考えています。
私はこの ER 図を最適化/修正するための情報を探しています。誰かが ER に怒鳴り始める前に、私はプログラマーであり、DB の専門家ではないことを述べたいと思います :)。