我有一个正在处理的项目,但我不知道哪个是“更好”的表关系模式。
相关区域的范围是:
用户上传文件(成为所有者/作者)
用户可以与其他用户共享文档(设置共享权限)
任何有权访问文档的用户都可以签出文档(独占锁定)
我的原始架构如下所示:
好处是:
只有一个用户可以是作者。(授权)
权限表仅包含“共享权限”(读、写)
用户可以轻松区分他们“拥有”哪些文件(authorid)与共享文件(sharedfiles 表)。(这个是一个微弱的好处,我知道)
经过深思熟虑后,我认为这可能是一个更好的模式:
好处是:
所有文档关联都位于一个位置 (UserFiles)
未来允许单个文档的多个作者/所有者的能力
权限表现在将具有读取、写入和所有者。一旦用户上传了文档,就会自动关联到新文档,并且用户将被授予“所有者”权限。
这使我得到了最终的架构:
好处是:
- 如果删除了用户文件关联(删除共享)并且该用户对该文件具有锁定(签出),则该排他锁定将被自动删除。
最后一个模型的唯一问题是我计划为每个部门添加“特殊”用户,以便用户可以将文档共享给整个部门。因此,我不确定是否要将共享关联与 checkoutID 相关联(如果有意义的话)。用户文件的查询看起来像“选择 userfiles.userid = me.userid || (userfiles.id == SpecialDepID && me.depid == SpecialDepID) 的所有文件”(主要伪代码)
自从我完成数据库模式以来已经有很长时间了,这个设计决定真的让我绞尽脑汁。哪个设计会“更好”真的让我很烦恼,更好的意思是更好的设计原则,根据以前的经验做出更好的决定,让设计更容易“成长”,等等。请让我知道你的想法!
最终解决方案
在 Michael Madsen 的帮助下,最终解决方案如下所示:
UserFiles 上将有一个触发器用于删除,它将确定在删除关系时是否应该删除锁。