我目前正在制作一个将订阅作为多租户应用程序销售的网络应用程序。我使用的技术是rails。
但是,它不仅仅是使用当前应用程序的隔离租户。
每个租户创建产品并将它们发布到他们的应用程序个人实例上。每个租户都有自己的用户群。
有问题的规范是租户可以将其产品分享给其他租户,以便他们可以转售。
解释 :
FruitShop 出售苹果橙子和西红柿。
蔬菜店出售萝卜和胡椒铃。Fruitshop 将西红柿分享给其他商店。
VegetableShop 决定从可用的共享项目列表中获取西红柿并将其添加到其库存中。
现在,浏览蔬菜店的顾客会看到萝卜、胡椒铃和西红柿。
如您所料, 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 的复杂更新。
我不确定像这样实现这个约束是个好主意,你建议我怎么做?我打算做一些愚蠢的事情还是一个不错的主意?