所以,我想就如何正确建模业务逻辑域提出一些建议。
在没有进入太多NDA信息的情况下,我正在尝试建模一个包含项目和人员的相对较大的系统(到目前为止没什么可怕的)。现在我正在Rails中构建它只是为了快速获得一些东西,但最终我将把它切换到一个Ember.js / JSON应用程序(不是那个问题非常重要)。
因此系统有几种不同类型的“人” - 有“用户”(可以实际登录系统的人)和“联系人”(有关人员的信息,如电话号码,地址,电子邮件)等)。这两者分开的唯一原因是它们在逻辑上是不同的(登录时不需要联系信息,并且不是每个“联系人”都需要登录信息或者应该可以登录)。一个正确的问题是,将这两个实体分开是否有意义,或者我是否应该创建一个宽广的平面对象,并使用所有字段对两个登录进行建模(我正在考虑设计所添加的所有字段)这里)以及所有要联系信息的字段。
此外,还有一些项目。项目将人们视为不同能力的“联系人”;一个项目可能有“Fred”作为主管或经理,“Diana”作为客户。有可能(尽管不太可能)另一个项目可能有“戴安娜”作为领导,“弗雷德”作为另一个角色。关键是每个联系人在每个项目中扮演的角色都是流动的。有一些角色需要填写才能使项目有效(好吧,不一定有效,但有效)。
最后,对于扭曲,该应用程序是多租户。因此,系统本身有多个“客户”(缺乏更好的术语),他们拥有自己的OWN客户,并且所有(顶级)客户数据必须严格分区。
现在,这就是我正在做的事情:
所以,我会把它留在那里,并以我的开头结束:任何人都有任何关于如何正确建模这个系统的建议或提示?我甚至会回答“伙计,这是一个复杂的系统,但你正在做的最好的事情。” :)
谢谢!
答案 0 :(得分:0)
以下是我将如何处理它......
首先,图表就是一切!也许你已经完成了这个或者没有,但我总是创建一个图表,显示所有不同的参与者(在这种情况下,用户,联系人,客户和客户的客户)并绘制他们的关系。
其次,我不会将用户和联系人分开。如果联系人成为用户怎么办?如果用户下载到联系人该怎么办?等等,这些都是你必须问自己的问题 - 那些“假设”情景虽然现在可能不太可能,但可能会在以后出现。如果用例发生变化,您将希望系统尽可能灵活。
所以,我会创建一个“用户”表并给他们一个权限列。此人是用户还是联系人?如果此人是用户,则不要求联系信息,但如果他们是联系人,则需要,但他们无法登录。此外,如果此人同时是用户,您可能应该有另一个选项联系。
然后,我会为客户的客户的多对多用例提供单独的“关系”表。类似的东西:
| ID | UserID | CustomerID |
-----------------------------
| 1 | 2 | 3 |
| 2 | 2 | 4 |
| 3 | 2 | 5 |
| 4 | 7 | 6 |
UserID是父客户的ID,CustomerID是子客户的ID。然后你可以约束谁看到了什么。
对于你的项目问题,同样的事情,我会创建一个名为ProjectRoles的单独模型/表,它具有项目ID,用户ID和角色名称。在确保表格设置稳定/持久并且还可以快速加载查询之间取得了很好的平衡。我宁愿第一次做对了!