首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计问题:如何为基于SAAS的应用设计数据模型?

设计问题:如何为基于SAAS的应用设计数据模型?
EN

Stack Overflow用户
提问于 2013-04-22 19:09:53
回答 2查看 1.1K关注 0票数 2

为基于SAAS的模型设计标准和用户专用记录的数据模型.

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

我的角色和公司表如下:

表:公司

代码语言:javascript
复制
    COMPANY_ID   |  COMPANY_NAME    
    100          |  Acme Inc.
    101          |  E Technologies.

表:作用

代码语言:javascript
复制
    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”的虚拟公司,并将所有标准/系统记录引用到“公司系统”。同样的挑战,用OR在hinernate 3.0中提取记录。不确定,如何在hibernate 3.0上使用没有自定义HQL的注释来执行这个OR子句?有些方法,团队不喜欢在数据库中伪造公司记录的想法。
  3. 我可以为每个租户创建标准记录的副本,并将它们分配给他们自己的company_id。但在这里,我将有至少80个标准记录为每个租户,如果我期望1000个免费的小径租户,我将最终分配8万记录空间。对这个设计有什么想法吗?不是三叶草的选择,但是选择这个没有选择。

相反,我更希望有一份标准记录的副本,所有租户都可以共享这些记录,因为它们是系统记录。

从可编程性、维护性、数据库空间等方面对完美先生的设计有何想法?

EN

回答 2

Stack Overflow用户

发布于 2014-03-29 14:50:32

我见过几个选择。

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

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

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

1)让Hibernate调用将这两个集合结合在一起的存储过程。

2)打两次电话,并在您的集合中集合。至少,您会缓存标准角色,因为它们是不稳定的。因此,这不会增加性能的影响。

票数 0
EN

Stack Overflow用户

发布于 2014-04-02 13:36:21

您可以向数据模型中添加一个角色类型实体,该实体对角色中的角色进行分类。我认为,这比在公司ID中使用空白要好得多。它还允许您构建一个角色层次结构(如果需要)--只需添加一个父角色属性和一个递归关系即可。

实体:公司(COMPANY_ID,NAME)角色(ROLE_ID,ROLE_TYPE_ID,COMPANY_ID,NAME) ROLE_TYPE (ROLE_TYPE_ID,PARENT_ROLE_TYPE_ID),NAME)

关系:公司对角色是1:M,ROLE_TYPE到角色是1:M,ROLE_TYPE到ROLE_TYPE是1:M

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16154826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档