我的应用程序有一个架构设计问题,希望我能得到老师的建议。这与基于角色的访问控制非常相似,但在细节上有点不同。
规格:
对于一家公司,有4个角色:公司(老板)/部门(经理)/团队(领导)/会员(销售),并且有大约100万个客户记录。每个客户记录都可以由某人拥有,他可以是Boss或经理或领导者或销售人员。如果唱片的所有者是某个销售人员,那么他的高年级(比如:他的领导/经理/老板)也可以看到这个记录(但是其他人:说他的同事级别相同,看不见,除非他的上层等级经理与客户分享客户),但如果记录的所有者是老板,除了老板本人之外没有人可以看到它。
我的设计是这样的(我希望改进它以使其更简单明了):
表:
部门 :
id (P.K. deparment id)
d_name (部门名称)
p_id (父部门ID)
员工
id (P.K。员工ID)
e_name (员工姓名)
employee_roles
id (P.K.)
e_id (员工ID)
d_id (部门ID)
客户
id (P.K。客户ID)
c_name (客户名称)
c_phone (客户电话)
权限
id (P.K.)
c_id (客户ID)
e_id (所有者员工ID)
d_id (此客户属于哪个部门)
share_to (此客户分享给其他人的身份)
P.S。:每个员工可以有多个角色,例如,员工A可以是department_I的经理,同时他也可以是deparment_II>>的一个销售人员。 Team_X。
因此,当员工通过查询 employee_roles 表登录应用程序时,我们可以获取所有部门ID和子部门ID,并将其保存到阵列中。
然后,我可以使用此阵列从权限表进行查询,并将其与客户表连接,以获取此员工应该看到的所有客户。 SQL可能如下所示:
我不喜欢上面的SQL,特别是" IN"因为我担心它会减慢查询速度,因为客户表中有大约100万条记录甚至更多;并且,权限表中的客户表会有尽可能多的记录, INNER JOIN 也可能非常慢。 (所以我关心的是每个人的表现:))
据我所知,这是我能解决的最好的设计,请教老师请帮忙就这个问题给我一些建议?如果您需要更多信息,请告诉我。 任何建议将不胜感激! 提前一百万感谢!!
答案 0 :(得分:1)
不要使用数组,使用表,即select语句的值。并且在了解有关表和查询的思考的基础知识之前,不要再担心性能了。
关系模型的要点是,如果将数据结构化为表格,则可以循环描述输出表格,DBMS会计算出如何计算数据。见this。不要考虑"加入&#34 ;;考虑描述结果。无论DBMS最终做什么,其业务都不是你的。只有在您了解了描述和描述选项的变化之后,您才能掌握基本知识以了解绩效。