多租户设计-在架构之间共享数据

时间:2018-08-26 23:53:17

标签: sql database multi-tenant

让我们考虑这种情况:

  1. 用户可以拥有公司(或其中的许多公司)
  2. 用户可以是公司的一部分(或在许多公司中)
  3. 公司是系统的单一租户
  4. 公司有任务列表
  5. 每个任务都分配给一个用户

现在考虑到上述情况,我想实现一个系统,在该系统中,每个公司(承租人)对其任务都有单独的架构,但是问题是对于每个任务,我还需要来自主架构的用户数据。 / p>

问题是如何解决这个问题

我想过的可能解决方案(但没有一个能真正说服我):

  1. 将与公司匹配的所有用户数据复制到公司的架构(这需要大量的同步,因此我觉得效率不高)
  2. 在模式之间切换并以编程方式“合并”它们-这涉及许多额外的代码来实现,并且违反了良好的做法-因为任务中的user_id会到达tanant模式之外)

我希望有一个我没有想到的更好的解决方案。请注意,这是一种简化的情况,仅用于描述问题。

1 个答案:

答案 0 :(得分:1)

听起来您想要几个表,例如userscompaniestasks和相关表。

通常,您不想在多个表之间拆分实体。这是一些原因。

  1. 维护少数几个表比维护数百个或数千个表要容易得多。
  2. 数据库在大型表上的效率更高。小表的激增导致单个实体的大量部分填充数据页面。
  3. 使用单个表可以轻松地进行某些查询,例如每个公司中有多少个任务。
  4. 对于多个表,此类查询通常需要求助于动态SQL,这对于简单的任务来说简直是一团糟。
  5. 当您必须将重组应用于不计其数的表而不是少数几个表时,重组数据成为噩梦。
  6. 添加新功能是一次噩梦,需要多次重复。

在一些罕见的情况下,分离数据很有意义。例如,如果应用程序将在每个公司内部部署,那么您别无选择。同样,您可能对保持数据物理分离有法律要求。但是从严格的数据库设计角度来看,每个实体需要一个表。