【问题标题】:SaaS, Multi-tenant (shared schema) - one table or two?SaaS,多租户(共享模式)——一张还是两张?
【发布时间】:2011-07-07 16:38:00
【问题描述】:

我正在为 SaaS 应用程序创建一个多租户(共享模式)数据库。该应用程序将允许订阅公司(租户)与其他公司(帐户 - 例如供应商、业务合作伙伴、客户等)协作。用户将与租户和帐户相关联。

这是我的问题:从设计的角度来看,是否可以将租户和帐户放在一张表中?我在想“是”,因为公司就是公司,无论他们是租户还是帐户。此外,我正在考虑使用诸如 is_tenant (Boolean) 之类的字段来破译租户,并可能将租户特定信息放在单独的表中。这是一个建议的架构:

  • 公司(company_id、is_tenant、姓名、地址等)
  • 用户(user_id、姓名、电子邮件、用户名、密码等)
  • company_users (company_id, user_id)
  • tenant_information(company_id、billing_address、billing_state 等)
  • tenant_accounts (tenant_id, account_id) – 将租户与帐户关联 [其中,tenant_id 和 account_id 将是公司表的 f_keys]

我通读了 MS 文章 Multi-Tenant Data Architecture,虽然很有帮助,但它没有提供答案。

非常感谢有关此架构的任何其他想法/cmets/陷阱。

提前致谢。

【问题讨论】:

    标签: database-schema saas multi-tenant


    【解决方案1】:

    我也同意...如果所有属性都相同,则无需为此创建另一个表(数据协定)

    我们也在使用类似的东西。在 SAAS 框架中,您始终需要小心创建表,否则重构和迁移将花费巨大的精力。

    我有一个问题!看不到任何包含公司特定信息(不是您的租户)的“Company_Information”表

    【讨论】:

    • 您好 Wali...感谢您的回复和信任投票。很高兴知道其他人倾向于这种设计。而且,关于 company_information 表,您是对的。它在那里,我只是没有在示例中包含它。还有其他想法吗?
    • 添加到同一主题:我们包括了更多类型的“公司”-->“供应商”、“客户”和“租户”,因此我们最终添加了一个枚举而不是布尔公司表中的字段。如果您预见到这种情况,最好使用枚举。
    • Wali...您是否希望有一个tenant_accounts 表来将租户与他们有业务往来的帐户(供应商、客户等)相关联?或者,您可以在公司表中放置一个 parent_id 来创建关系吗?哪一种设计更优越?
    • 拥有一个tenant_accounts 更具建议性,因为这会将所有租户会计主导信息分隔在一个表中。在公司表中有一个 parent_id 对我来说是不行的,因为这种设计是不必要的复杂。作为租户,所有帐户信息都应分开,并且只应与租户表关联。 我的假设是所有客户和供应商都将在租户表中......如果不是,那么这是一个不同的提议。
    • Piet,你最终的设计是什么。还可以分享您对您进行的设计的经验。
    猜你喜欢
    • 2011-04-30
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2016-09-07
    • 2014-09-05
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多