我正在设计一个数据库来处理具有以下关系和约束的用户,帐户和项目:
换句话说,用户可以在同一帐户的许多项目中进行协作。但由于用户可以属于多个帐户,因此用户可以在多个帐户的许多项目中进行协作。这使我得到了一个三元合作关系:
在阅读了几篇关于将三元关系转换为二元关系的论文之后,我提出了以下等价关系:
这里出现了两个问题:
此转换是否正确?我发现我必须在应用程序级别添加额外的检查来处理插入。例如,在添加新(User,Project)
之前,我必须检查用户是否属于项目所属的同一帐户。
是否真的有必要建立Account
和User
之间的关系?添加User
和Project
之间的关系后,我们无法通过访问项目来了解用户所属的帐户吗?
谢谢!
答案 0 :(得分:12)
这种转换是否正确?
如果“正确”表示“等效”,则为“
”如果没有连接用户(等等),没有什么可以阻止你连接项目和帐户,这在真正的三元关系中是不可能的。
是否真的有必要建立帐户和用户之间的关系? ...通过访问项目,我们无法知道用户所属的帐户吗?
实际上,我们只知道哪些帐户是“候选人”与用户连接,但我们没有办法选择一个。
此方案的真正问题在于,它允许您将用户连接到与任何用户项目无关的帐户。
在我看来,如果您需要三元关系,请继续直接在物理模型中表示。如果我正确理解您的要求,这将是这样的:
请注意AccountId
在Collaboration
PK之外的情况。这意味着每个项目/用户组合必须只连接到一个帐户(不同的组合仍然可以连接到其他帐户)。