【问题标题】:Design Issue: How to design the data model for SAAS based application?设计问题:如何为基于 SAAS 的应用程序设计数据模型?
【发布时间】:2013-04-15 19:27:00
【问题描述】:

为基于 SAAS 的模型的标准和用户特定记录设计数据模型。

在我的基于 SAAS 的应用程序中,我有用户及其关联的(一对一)角色。租户可以创建自己的特定于其公司的角色并分配给他们的用户。并且 SYSTEM 提供了一些标准角色供租户使用。 SYSTEM 定义的标准角色对所有租户都是通用的。

我的 ROLE 和 COMPANY 表如下:

表:公司

    COMPANY_ID   |  COMPANY_NAME    
    100          |  Acme Inc.
    101          |  E Technologies.

表:角色

    ROLE_ID |   COMPANY_ID  | ROLE_NAME         | IS_STANDARD_ROLE
    1       |               | ADMINISTRATOR     |Yes
    2       |               |MANAGER            |Yes
    3       |   100         |MyAdmin            |No
    4       |   100         |MySpecialist       |No
    5       |   101         |Supervisor         |No

这里我有 ROLE.COMPANY_ID 引用 COMPANY.COMPANY_ID

我正在尝试找出在同一个表中同时容纳标准角色和用户定义角色的最佳方法,并让带有注释的 Hibernate 3.0 可以轻松提取。

这是我现有的替代方案。

  1. 我可以在上面的同一个表中同时拥有标准和客户定义的角色,并将 ROLE.COMPANY_ID 字段留空(如果 mysql 允许)作为标准。但对于 hibernate3.0 来说,挑战在于同时拉取 ROLE.COMPANY_ID=100 或 ROLE.COMPANY_ID=

  2. 我可以在 company 表中定义一个名为 SYSTEM 的虚拟公司,并将所有标准/SYSTEM 记录引用到名为 SYSTEM 的公司。同样的挑战是在hinernate 3.0 中使用或使用aootations 提取记录。 不确定,如何在没有自定义 HQL 的情况下使用注释在休眠 3.0 上执行此 OR 子句?不知何故,团队不喜欢数据库中的虚拟公司记录的想法。

  3. 我可以为每个租户创建标准记录的副本,并将它们分配给他们自己的 company_id。但这里的问题是,我将为每个租户至少有 80 条标准记录,如果我预计有 1000 个免费跟踪租户,我最终将分配 80,000 个记录空间。这个设计有什么想法吗?不是三叶草选项,而是选择这个没有任何选项..

相反,我希望拥有一份标准记录,所有租户都可以共享,因为它们是 SYSTEM 记录。

对 Mr. Perfect 的设计在 SAAS 启动的可编程性、维护性、数据库空间方面有何想法。

【问题讨论】:

    标签: database data-modeling saas


    【解决方案1】:

    我看到了几个选项。

    我更喜欢有两张表,一张用于标准角色,一张用于客户定义的角色。这很微妙,但它们本质上是两个不同的实体:所有租户共有的角色和租户自定义角色。这些最终可能会在属性和/或关系上有所不同。

    另一种是将它们整理在一个表中,就像您的前两个建议一样,它们本质上是相同的解决方案。我不喜欢这样的原因是您重载了 COMPANY_ID 的定义。您几乎总是会后悔重载列定义。

    无论哪种方式,我都会选择以下方法之一:

    1) 让 Hibernate 调用一个联合这两个集合的存储过程。

    2) 有两个电话并在您的收藏中集合。至少您会缓存标准角色,因为它们不是易失性的。所以这不会增加性能损失。

    【讨论】:

      【解决方案2】:

      您可以将 ROLE TYPE 实体添加到您的数据模型中,该实体对 ROLE 中的角色进行分类。我认为这比公司 ID 中的空白要好。如果需要,它还允许您构建角色层次结构 - 只需添加 PARENT ROLE 属性和递归关系。

      实体: 公司(COMPANY_ID,名称) ROLE(ROLE_ID、ROLE_TYPE_ID、COMPANY_ID、NAME) ROLE_TYPE (ROLE_TYPE_ID, PARENT_ROLE_TYPE_ID), NAME)

      关系: COMPANY to ROLE 是 1:M ROLE_TYPE 到 ROLE 是 1:M ROLE_TYPE 到 ROLE_TYPE 是 1:M

      【讨论】:

        猜你喜欢
        • 2016-12-07
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多