2016-07-12 5 views
0

することにより、特定のデフォルトのデータを除外:マルチテナントは、データを共有し、私はPostgresの/ MySQLのの上に、マルチテナントアプリケーションを構築していますテナント

  • シングルDB。
  • シングルスキーマ。
  • すべてのテーブルでtentant_idを使用します。

クレジットカードのようなデフォルトデータのように、テナント間でデータを共有する方法を混乱させています。 すべてのテナントにこのデフォルトのクレジットカードのブランドが表示されます。ただし、アカウントの特定のブランドを削除することはできます。

  • テナント
  • credit_card_brands私はに手を差し伸べる

考えられる解決策:

  • credit_card_brandsのデフォルト値は= tenant_idすることができ

    だから、私はテーブルを持っていますNULLが、テナントはどのように削除されますか? (tenant_excludesフィールドを使用?)

  • 別のテーブル(ピボットテーブル)を作成し、tenant_credit_card_brandその

私の懸念との関係で、重複データのために離れて実行することで、メンテナンスが容易です。例:すべてのテナントに新しいデフォルト値を追加する必要がある場合は、テーブルにのみ挿入します。

私の質問:どうすればこのアーキテクチャを作成できますか?テナントは、デフォルトデータを表示したり、削除したり(アカウントでのみ)、詳細を挿入/削除することができます。

ありがとうございます!

+0

これは簡単ですが、今はスキーマがあまりにも漠然としています。誰もができることは、ハイレベルな話をすることです、それはどのように役立つのですか? – Drew

答えて

0

credit_card_brandsのテーブル。 PRIMARY KEY(cc_id)。そこにtenant_idはありません。

tenant_idとcc_idの多対多の関係を処理するテーブル。新しいテナントはそれぞれ、典型的なリストのデフォルトで始まります。テナントは、あなたが持っているいくつかのAPIを介して、望ましくない関係を削除することができます。

これもまたtenant_id(およびPRIMARY KEYの一部)を持つ別のテーブルです。テナントごとに複数の行があります。

Advice on structure of many-to-many table

0

あなたはクレジットカードの2セットを持っている:

  1. すべてのクレジットカード
  2. 特定のテナントが第三あり

受け入れるクレジットカードのセットの「デフォルト」のセット、

  1. 特定のテナントが受け付けないクレジットカードのセット

#3 = #1 - #2または#2 = #1 - #3を派生させることができます。利便性の問題として、第2の選択肢は、維持するのがより短いリストであり、新しいカードがオンラインになると、自動的に#2の一部になるので好ましいと思われる。

今、私たちは、ビューを想像することができます。

select * from cards 
EXCEPT 
select ... from unacceptable 
where tenant_id = @tenant_id 

ます。また、同じ効果にwhere not existsを使用することができます。

HTH。

関連する問題