9

我正在设计一个数据库来处理具有以下关系和约束的用户、帐户和项目:

  • 一个帐户有很多用户
  • 一个用户属于多个账户
  • 一个账户有很多项目
  • 一个项目只属于一个账户
  • 用户在许多项目中进行协作(冗余说明:每个项目都属于自己的帐户)。

换句话说,一个用户可以在同一个帐户的多个项目中进行协作。但是由于一个用户可以属于多个账户,因此一个用户可以在多个账户的多个项目中进行协作。这使我建立了三元合作关系:

在此处输入图像描述

在阅读了几篇关于将三元关系转换为二元关系的论文后,我提出了以下等价关系:

在此处输入图像描述

这里出现两个问题:

  1. 这种转换正确吗?我发现我必须在应用程序级别添加额外的检查来处理插入。例如,在添加新用户之前,(User,Project)我必须检查用户是否属于项目所属的同一帐户。

  2. 真的有必要建立 和 之间的关系AccountUserUser加上和之间的关系Project后,我们不能通过访问项目知道用户所属的帐户吗?

谢谢!!

4

1 回答 1

14

这种转换正确吗?

如果“正确”的意思是“等效”,那么不是。

在不连接用户(等等)的情况下,没有什么可以阻止您连接项目和帐户,这在真正的三元关系中是不可能的。

真的有必要建立Account和User之间的关系吗?...我们不能通过访问项目知道用户所属的帐户吗?

实际上,我们只知道哪些帐户是连接到用户的“候选”,但我们没有好办法选择一个。

这个方案的真正问题是它允许您将用户连接到与用户的任何项目无关的帐户。


在我看来,如果你需要三元关系,直接在物理模型中表示即可。如果我正确理解您的要求,这将如下所示:

在此处输入图像描述

注意PKAccountId之外的情况。Collaboration这意味着每个项目/用户组合都必须连接到一个帐户(不同的组合仍然可以连接到不同的帐户)。

于 2012-05-15T11:48:44.633 回答