2011-07-06 10 views
1

私は、SaaSアプリケーション用のマルチテナント(共有スキーマ)データベースを作成しています。このアプリケーションは、加入企業(テナント)が他の企業(ベンダー、ビジネスパートナー、顧客などのアカウント)と共同作業することを可能にします。ユーザーはテナントとアカウントの両方に関連付けられます。SaaS、マルチテナント(共有スキーマ) - 1つまたは2つのテーブル?

私の質問:デザインの観点からは、テナントとアカウントを1つのテーブルに入れても大丈夫ですか?私は「はい」と考えています。会社がテナントかアカウントかにかかわらず会社なのでです。さらに、私はis_tenant(ブール値)のようなフィールドでテナントを解読し、テナント固有の情報を別のテーブルに置くことを考えていました。ここで提案されたスキーマは次のとおりです。

  • 企業(のcompany_id、is_tenant、名前、住所など)
  • ユーザー(user_idは、名前、電子メール、ユーザ名、パスワードなど)
  • company_users(のcompany_id、 USER_ID)
  • tenant_information(のcompany_id、billing_address、billing_state、等)
  • tenant_accounts(tenant_id、ACCOUNT_ID)は -
0 [tenant_idとACCOUNT_IDは企業テーブルにf_keysであろう]アカウントを持つテナントを関連付けます

私はMSの記事Multi-Tenant Data Architectureを読んでいましたが、役に立つとはいえ、回答が得られませんでした。

このスキーマに関するその他のご意見、ご意見、落とし穴があれば幸いです。

ありがとうございます。

答えて

0

また、すべてのプロパティが同じ場合は、の別のテーブル(データコントラクト)を作成する必要はありません。

また、この種のものも使用しています。 SAASフレームワークでは、テーブルを作成する際には常に慎重にする必要があります。それ以外の場合は、リファクタリングするために莫大な努力を払います&

質問があります。会社特有の情報(あなたのテナントではありません)を持つ "Company_Information"テーブルを参照してください。

+0

こんにちはワリ...返信と信頼の投票に感謝します。誰かがこのデザインに傾いているのを知っているのは良いことです。そして、あなたはcompany_informationテーブルについて正しいです。それはそこにある、私は例にそれを含めなかった。そこに他の考え? – Piet

+0

同じトピックを追加する: 「会社」 - >「ベンダー」「顧客」「テナント」のいくつかのタイプが追加されました。このため、** Companyのboolフィールドの代わりにenumを追加しました表**。あなたがその種のものを予見すれば、それはenumを持つほうが良い。 – Wali

+0

Wali ...テナントを取引するアカウント(ベンダー、顧客など)にテナントを関連付けるtenant_accountsテーブルがありますか?または、単に企業のテーブルにparent_idを置くと、関係を作成できますか?どちらのデザインも優れていますか? – Piet

関連する問題