我有一个Access应用程序,其中有一个员工表。员工是组织中几个不同级别的一部分。该组织有1个总经理,5个部门负责人,每个部门负责人是几个主管人员,在这些主管人员下面是工作人员。以表格形式表示的组织结构图
根据员工的职位,他们只能访问他们下方的记录。
我想用某种级别的系统来表示组织。我看到的问题是,同一级别上有很多人(例如主管),但他们不应该访问另一个部门的主管记录。我应该如何处理这个问题?
我有一个Access应用程序,其中有一个员工表。员工是组织中几个不同级别的一部分。该组织有1个总经理,5个部门负责人,每个部门负责人是几个主管人员,在这些主管人员下面是工作人员。以表格形式表示的组织结构图
根据员工的职位,他们只能访问他们下方的记录。
我想用某种级别的系统来表示组织。我看到的问题是,同一级别上有很多人(例如主管),但他们不应该访问另一个部门的主管记录。我应该如何处理这个问题?
一个保持这种分层数据在数据库中的常见的方法只使用一个表,包含字段是这样的:
然后,您的应用程序使用SQL查询来确定权限。要找出主管'X'(例如,其userId为'3')的员工可以查看,可以查询supervisorId = 3的所有员工。
如果你想要更高级的老板能够看到他们下面的每个人,最简单的方法就是做一个递归搜索。即查询向这位大老板报告的每个人,并为他们每个人查询向他们报告的人,一直到树上。
这有道理吗?你让数据库完成了对所有用户进行排序的工作,因为电脑擅长这种事情。
如果您希望某些人拥有不同的权限,我会在此示例中添加positionCode ...例如,对于有权查看所有员工列表的HR员工,您可能有一个代码“99”。
也许我会让另一些人试图更好地解释它...
你能帮我一下SQL查询吗?你认为这样的事情会起作用吗? SELECT * FROM tblemployee WHERE userId IN(SELECT userId FROM tblemployee WHERE SupervisorId = 3) – zohair 2009-11-09 14:07:50
不确定在那里使用双层查询会发生什么。 要让所有向userId为3的主管报告的员工只需要“SELECT * FROM tblemployee WHERE SupervisorId = 3”。 – ewall 2009-11-09 14:58:24
如果您试图让所有员工都处于高级经理之下...我不相信MS Access可以在SQL中执行真正的递归查询;但是你可以使用VBA代码,我不能在这里为你写信。但想法是这样的:创建一个名为GetAllReports的函数,给它一个你想要检查的主管的ID,让它做以下操作:(1)查询所有主管是你给它的ID的ID,(2)对于找到的每个id,为该id再次运行_itself_并保留结果,并(3)返回从初始查询中收集的所有id以及每次运行GetAllReports时收集到的所有id。 – ewall 2009-11-09 15:01:02
为什么你不概述你正在考虑的方法 - 这可能会产生更多的反应,并将问题带入编程领域(我认为它是无论如何,因为模式设计是应用程序的一部分设计,即使它不涉及任何实际的代码冲击)。 – 2009-11-06 22:08:37