【问题标题】:How to resolve these SQL tables如何解析这些 SQL 表
【发布时间】:2016-08-25 15:02:03
【问题描述】:

好的,所以 - 我有 3 张桌子。 项目 组织 联系人

我这辈子都不知道如何解决他们之间的关系。 以下是业务规则:

  • 一个组织可以有很多员工
  • 可以雇用一个组织来处理多个项目

  • 一个员工可以成为一个组织的一部分

  • 一个员工可以是多个项目的联系人

  • 一个项目可以雇佣多个组织

  • 一个项目可以有多个员工(每个组织一个联系人)

作为组织的一部分,需要能够为这两个项目分配联系人 需要能够将组织分配给项目 我已经尝试了所有我能想到的来解决那里的多对多关系,但找不到让这一切正常的方法...... 提前感谢您的帮助!

【问题讨论】:

  • 所以您也需要一个 Employee 表,对吗?或者联系人应该是员工?
  • 你试过什么?有时使用像这样的简单模式,最好在 ERD 中将其绘制出来。

标签: sql sql-server entity-relationship


【解决方案1】:

用以下方式映射这些关系似乎相当简单;

一名员工可以是一个组织的一部分。

一个组织可以有很多员工

This can be handled by having an OrganizationId on the Employee table.

一个员工可以是多个项目的联系人

一个项目可以雇佣多个组织

一个项目可以有多个员工(每个组织一个联系人)

可以雇用一个组织来处理多个项目

This seems to be handled by having a (some would call bridge table) ProjectResource table, which has a ProjectId and ContactId field. (This could also have OrganizationId, depending on how you are using the database, but to be more normalized, since it can be implied by the Contact, it is not needed)

【讨论】:

  • 这似乎可行!我以前只尝试过组织和项目之间的桥接表,没想到员工表在那里代替将把它全部放入并用一些测试数据看看它的表现,然后回来说它是否有效.谢谢!
  • 问题 - 有了这个桥接表,我该如何更新一行?如果联系人离开他们的组织并且项目需要将该联系人移走或替换他们更新​​ projectID 其中contactID 不起作用,因为表中有多个实例我需要一个唯一的桥标识符吗?
  • 一个员工只能在给定项目上一次,所以你可以这样做; SET ProjectId = y WHERE EmployeeId = x AND ProjectId = x
【解决方案2】:

只要您在两个特定表之间的关系是多对多的,您可能需要有一个单独的表(通常也称为桥表)来表示该关系。

所以你需要这些表:

  • 组织(有项目外键,有联系人外键)
  • 员工(有项目外键)
  • 项目(有组织外键,有联系人/员工外键[见联系人])
  • 联系人(此表可能需要也可能不需要,具体取决于项目是否可以有多个联系人。如果不需要,您可以将所有联系人外键替换为员工)
  • Organization 和 Project 之间的桥接表(具有组织和项目外键)

我可能错过了一些东西,但我认为你明白了。您只需要绘制一个 erd 即可清楚地确定所有这些关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2016-03-19
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多