gpt4 book ai didi

database - 设计问题 : How to design the data model for SAAS based application?

转载 作者:搜寻专家 更新时间:2023-10-30 20:57:19 25 4
gpt4 key购买 nike

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

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

相反,我更愿意拥有一份标准记录副本,所有租户都可以在其中共享,因为它们是系统记录。

对于Mr.Perfect在SAAS启动的可编程性、维护性、DB空间方面的设计有什么想法?

最佳答案

我见过几个选项。

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

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

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

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

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

关于database - 设计问题 : How to design the data model for SAAS based application?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com