我根据本文设计了我的帐户/用户表设计。所以我将我的表关系设置为如下所示:
User <- Memberhip -> Group -> Account
在这种设计中,a通过一个表user
绑定到。A属于。到目前为止,一切都很好。group
membership
group
account
现在我想添加一个catalog
属于一个帐户但可以由一个组访问的新资源。一个组可能对不同目录具有不同的访问级别;它可能对一个目录具有完全编辑权限,但对另一个目录具有只读权限。不同的组可以访问目录。由于这是多对多关系,因此需要一个数据透视表,它还将确定组对每个目录的访问级别:
我尝试将目录表直接放在一个组下,但使用这种方法,该帐户不是目录的直接所有者,而是该组。更难访问不同的组。我还可以为每个新目录创建新组,但现有组只能属于一个目录。
我怎样才能修复这个设计,使它没有循环关系?
在我看来,你不能删除你建模的关系。
避免这种“循环”模型的一般原因是,在 2 年内,当下一个人维护这个数据库时,他们会认为他们可以从
group
到catalogue
viaaccount
orrole
- 从技术上讲,他们可以,但他们选择的路线决定了意义的关系。如果他们通过
account
,则表示“该组的帐户拥有以下目录”。如果他们通过
role
,则表示“允许此组访问这些目录,具有这些角色权限”。两者都是有效的关系。
在我看来,设置描述关系的非常好的列名。如果您的 DBMS 支持在 DB 对象上添加注释/文档,请这样做(即使此功能在实践中似乎很少使用) - 当它是对象定义的一部分时很难丢失文档(与某些 wiki 页面或文本文件)。
考虑添加名为“GroupCatalogues”和“AccountCatalogues”的视图,它们可以很好地指示它们将显示的内容,并将连接规则封装在这些视图中,以便在开发人员访问视图而不是直接访问表时显示正确的数据。
考虑是否可以撤销对表的直接访问权以强制开发人员访问视图。