代码之家  ›  专栏  ›  技术社区  ›  suomi-dev

使用多个模式或customerId表列实现多租户数据结构

  •  1
  • suomi-dev  · 技术社区  · 7 年前

    我正在开发多租户商店web应用程序(软件即服务),这将被许多客户使用。我只想使用一个数据库。如果您能在数据库中对此提出建议/反馈,我将不胜感激:

    1. 每个客户的单独模式。每当新客户注册时,我都会创建单独的模式。

    2. 具有所有客户的单一模式。并使用customerId创建一个CUSTOMER表,该表在所有其他表(例如订单、付款等)中引用。每当新客户注册时,我都会在customer表中创建一个条目。

    如果您想知道正在使用哪些技术: Postgres、Spring Boot MVC、REST、Maven、JPA。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Chris Travers    7 年前

    这里有一些主要的权衡。有了客户id,您的外键变得更加复杂(客户id可能应该是每个外键的一部分),这意味着额外的索引。这也意味着你必须有一些手段来实施这一限制。最大的问题是,应用程序中的错误很容易从其他客户那里泄露信息。

    对于多个模式,您会遇到一个问题,即您有更多的表,这尤其会导致pg_转储的性能问题。然而,有了适当的搜索路径,就更难破坏其他客户的数据。但是,这很难用于连接池。

    总的来说,我认为模式方法更好,因为您总是可以通过按客户集划分来扩展,并且更好的安全性很重要。然而,这意味着您必须很好地理解search\u path,并在每个数据库事务中将其设置为合理的值。