SAAS ベースのモデルの STANDARD および USER SPECIFIC レコードのデータ モデルの設計。
私の SAAS ベースのアプリケーションには、ユーザーとそれに関連付けられた (1 対 1) ロールがあります。テナントは、会社に固有の独自の役割を作成し、ユーザーに割り当てることができます。また、SYSTEM には、テナントが使用できる標準的なロールがいくつか用意されています。SYSTEM 定義の標準ロールは、すべてのテナントに共通です。
次のように ROLE および COMPANY テーブルがあります。
表: 会社
COMPANY_ID | COMPANY_NAME
100 | Acme Inc.
101 | E Technologies.
表: 役割
ROLE_ID | COMPANY_ID | ROLE_NAME | IS_STANDARD_ROLE
1 | | ADMINISTRATOR |Yes
2 | |MANAGER |Yes
3 | 100 |MyAdmin |No
4 | 100 |MySpecialist |No
5 | 101 |Supervisor |No
ここに ROLE.COMPANY_ID 参照 COMPANY.COMPANY_ID があります
標準ロールとユーザー定義ロールの両方を同じテーブルに収容し、注釈付きの Hibernate 3.0 を複雑にすることなくプルできるようにする最善の方法を見つけようとしています。
ここに私が用意している代替案があります。
上記と同じテーブルに標準ロールと顧客定義ロールの両方を配置し、ROLE.COMPANY_ID フィールドを (mysql が許可する場合) 標準の場合は空白のままにすることができます。しかし、課題は、hibernate3.0 が ROLE.COMPANY_ID=100 または ROLE.COMPANY_ID= の両方を取得することです。
company テーブルに SYSTEM というダミーの会社を定義し、すべての標準/SYSTEM レコードを SYSTEM という Company に参照させることができます。再び aootations を使用して hinnernate 3.0 で OR を使用してレコードをプルするという同じ課題。カスタムHQLなしでアノテーションを使用してhibernate 3.0でこのOR句を実行する方法がわからない? どういうわけか、チームはデータベース内のダミーの会社レコードのアイデアが好きではありません.
各テナントの標準レコードのコピーを作成し、それらを独自の company_id に割り当てることができます。しかし、ここでの変更点は、各テナントに少なくとも 80 の標準レコードを用意し、1000 のフリー トレイル テナントを予想する場合、最終的に 80,000 レコード スペースを割り当てることになります。このデザインについて何か考えはありますか?クローバーオプションではありませんが、オプションが残っていない場合はこれを選択してください..
代わりに、システム レコードであるため、すべてのテナントが共有できる標準レコードのコピーを 1 つ用意することをお勧めします。
プログラマビリティ、メンテナンス、SAAS スタートアップ用の DB スペースの観点から、パーフェクト氏の設計について何か考えはありますか?