0

规划创建门禁系统。牢记教育机构,我创建了外围表,例如大门,区域,建筑物,级别,部分,房间(每个表都具有外键关系).....现在我希望创建部门表和员工表,但是如何我可以将部门定义为特定的边界吗?因为作为用户,部门可以是一个房间或整个建筑物。我猜将所有外围表外键都放入部门表中不是一个合适的方法。如果用户通过不同的点到达检查点,我也希望访问在路径中,不想授权。我是数据库设计的新手,可能有一种我没有想到的简单方法。请帮助提供最佳设计理念来创建上述内容。提前致谢..

4

1 回答 1

2

由于创建安全位置的层次结构的目的是管理谁应该有权访问哪些位置,因此最好使用内卷外键(自引用关系) 在单个表中管理所有这些位置。

考虑以下 ERD:

ERD

这里有可以包含其他安全区域的安全区域。人们被授予访问适当区域的权限。访问较低级别区域意味着访问包含较低级别区域的所有区域。

使用内卷外键意味着必须处理分层数据,这在 SQL 中可能是个麻烦事。为了简化层次结构导航,我建议使用我在回答这个问题时详细描述的访问次数

在任何类型的访问控制系统中要考虑的一件事是最大限度地减少安全管理员维护的数据量。许多人将具有相同的访问规则。出于这个原因,您可能希望扩展上述 ERD 以使用基于角色的安全性,其中而不是个人被授予对区域的访问权限,并且个人被授予对组的访问权限。有关基于角色的安全性的更多信息,请参阅我在 dba.se 上对此问题的回答。如果可能有帮助,您可以混合使用基于角色的访问规则和个人访问规则。

要考虑的另一个选项是您的 ACCESS 表可以同时包含允许禁止标志。这些可用于允许访问更大的区域,同时特别禁止访问包含在其中的较小区域。这种方法可以减少需要为每个人管理的数据量。

于 2012-08-16T12:52:34.620 回答