【发布时间】:2018-08-27 08:33:47
【问题描述】:
让我们考虑这种情况:
- 用户可以拥有一家公司(或多家)
- 用户可以是公司的一部分(或许多公司)
- 公司是系统的单一租户
- 公司有一个任务列表
- 每个任务都分配给一个用户
现在考虑到上述情况,我想实现一个系统,其中每个公司(租户)都有一个单独的架构来完成其任务,但问题是对于每个任务,我还需要来自主架构的用户数据。
问题是如何解决这个问题
我想到的可能的解决方案(但没有一个真正让我信服):
- 将与公司匹配的所有用户数据复制到公司的架构中(这需要大量同步,因此我认为效率不高)
- 在模式之间切换并以编程方式“合并”它们 - 这涉及到许多额外的代码来实现,它违反了良好的做法 - 因为任务中的 user_id 会到达 tanant 的模式之外)
我希望有一个我没有想到的更好的解决方案。请注意,这是一个简化的案例,只是为了描述问题。
【问题讨论】:
-
或者3,不要使用模式来分隔租户数据。
-
我认为这也不好。随着越来越多的用户和公司(和任务),搜索任务以查询属于给定公司的任务将是无效的。
-
索引...使用它们。只要您有适当的设计和索引,数据库就非常擅长查找数据。或者执行您的两个建议之一,这将是维护和性能的噩梦。
-
是的,但是在一个模式和单独的模式之间仍然存在巨大的计算差异。维护是我真的想避免这两种解决方案的另一个原因,如果没有其他方法出现,那么一种模式就是要走的路。
-
就数据库而言,仅在架构上有所不同的两个相同表是两个不同的表。您将构建自定义 UNION 查询以获得您想要的结果,因此告别计划缓存。每个客户的架构很快就会变得无法维护。
标签: sql database multi-tenant