現在、サブスクリプションをマルチテナント アプリとして販売する Web アプリを作成中です。私が使用している技術はレールです。
ただし、現在のアプリを使用してテナントを隔離するだけではありません。
各テナントは製品を作成し、アプリの個人用インスタンスで公開します。各テナントには独自のユーザー ベースがあります。
問題のある仕様は、テナントがその製品を他のテナントと共有できるため、再販できることです。
説明 :
FruitShop では、リンゴ オレンジとトマトを販売しています。
ベジタブルショップでは、大根とペッパーベルを販売しています。Fruitshop は他のショップにトマトを共有しています。
野菜店は、利用可能な共有アイテムのリストからトマトを取得し、在庫に追加することにしました。
これで、野菜屋をブラウジングしている顧客には、大根、ペッパー ベル、トマトが表示されます。
ご想像のとおり、 aは機能し
select products where tenant_id='vegetableshop_ID'
ません。
、 、さらには開始日と終了日を公開する、ある種のtenant_to_product
テーブルと多対多の関係を構築することを考えていました。また、製品は、元の所有者を知るためにテナント ID が tenant_creator_id に置き換えられる「ハーフ テナント テーブル」になります。tenant_id
product_id
price_id
私には面倒に思えます。これを追加すると、自社製品のみを販売するショップであっても、複雑なクエリが必要になります。販売された製品を取得するのは複雑です。
select tenant_to_products.*
where tenant_to_products.tenant_ID='current tenant'
AND (tenant_to_products.product match publication constraints)
for each tenant_to_product do
# it will trigger a lot of DB call
Display tenant_to_product.product with tenant_to_product.price
製品の非共有は、元の製品を参照するすべての tenant_to_products を変更する複雑な更新も意味します。
この制約をこのように実装するのが良い考えかどうかはわかりません。どうすればよいと思いますか? 私は何かばかげたことをするつもりですか、それともそれほど悪い考えではありませんか?