繁体   English   中英

多租户设计 - 在模式之间共享数据

[英]Multi tenancy design - sharing data between schemas

让我们考虑这样的情况:

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

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

问题是如何解决这个问题

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

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

我希望有一个我没有想到的更好的解决方案。 请注意,这是一个简化的案例,只是为了描述问题。

听起来您想要一些表,例如userscompaniestasks和相关表。

通常,您不希望跨多个表拆分实体。 以下是一些原因。

  1. 维护少数表比维护成百上千个表更容易。
  2. 数据库在较大的表上有效。 小表的激增导致单个实体出现大量部分填充的数据页。
  3. 某些查询——例如每家公司有多少任务——使用单个表要容易得多。
  4. 对于多个表,这样的查询通常需要求助于动态 SQL,这对于简单的任务来说只是一团糟。
  5. 当您必须将重构应用于数以万计的表而不是少数表时,重构数据就变成了一场噩梦。
  6. 添加新功能是一场噩梦,因为它必须重复多次。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM