【问题标题】:One-to many relationships in ER diagramER图中的一对多关系
【发布时间】:2017-09-21 12:33:15
【问题描述】:

我试图在 ER 图中显示以下内容:

There are instructors and courses, a course is taught by only one instructor
whereas an instructor can give many courses.

我的问题是,两个图表之间有什么区别,换句话说,我们把哪条线变成箭头重要吗,还是只重要的是箭头的方向?

此外,如果我们考虑映射基数;是1对多还是多对1?如果我们从课程的角度考虑,那就是多对一,但如果我们从教师的角度考虑,那就是一对多。我们如何决定这个? 谢谢。

【问题讨论】:

    标签: database relational-database entity-relationship


    【解决方案1】:

    在表示关系的 ER 图中,不使用箭头。一些教师在想要确定基数时使用此箭头,但这只是为了获得基数(1:1、1:M 和 N:M)

    我已经附上了陈记法的 ER 图,还使用了 Crow 记法,你可以使用它们中的任何一个。

    确定关系的基数是一个实际场景,没有硬性规则来获得它。你需要做的是从关系的一侧开始,取一个元组(实例),看看有多少来自另一个实体的元组参与了关系。然后反之亦然。然后你知道从每个实体到关系的元组的参与数量。当你决定基数时,想想数学中的集合论和函数(即教师集、课程集和教导关系类型),那么这很容易,但如果你不是来自数学背景,只需想想实际场景。

    举例

    a) 对于 1 位讲师,他或她可以教授许多 (M) 门课程

    b) 1 门课程只有 1 位讲师

    所以在讲师方面,a) 和 b) 中总是有 1,但在课程中,a) 和 b) 中有 M 和 1,对于讲师来说:课程基数是 1:M

    【讨论】:

    • 但是如果我在两个实体之间有一个钻石属性是否正确?
    • @DeniseTan 是的,确实有可能。一个多对多关系可以通过一个联结表规范化为两个一对多关系。这将由一个抽象模型表示,该模型还可以包含属性(即时间戳)。例如,SO 中的问题和标签是多对多的关系。问题的标签可以用question_tags关系表示。这个关系可能有一个inserted_at 字段,表示标签分配的时间戳。
    【解决方案2】:

    我不认为另一个答案是完全正确的。

    我会说一个应该使用箭头,并且应该使用一种表示法,为关系的每个方向提供一个有意义的名称。在这种情况下,它将在一个方向上“教导”,而在另一个方向上“被教导”。要么在名称旁边使用箭头,要么将名称放在它所指的实体附近。您可以使用一条线(带有两个箭头)或两条线(每个带有一个箭头)。

    我还建议基数只是一种约束,符号应该反映这一点。例如,关系的两个名称可以是“teaches (many)”和“isteacher by (exactly one)”。关键是你可能有“教(一个或两个)”或“由(正好两个)教”等等。

    最好明确和清楚地了解您的约束到底是什么。

    【讨论】:

      【解决方案3】:

      两者的基数完全相反

      ?简单干净的线条意味着很多。

      ?箭头表示一个。

      如果我们考虑两者具有相同的基数。

      那么,多对多应该通过遵循第二个约定来表示(请假设关系集为菱形,实体集为矩形)

         INSTRUCTOR <---- TEACHES -----> COURSE 
      

      其实没什么意义。

      如果我们以相反的基数考虑两者。

      那么,多对多应该通过遵循第二个约定来表示(请假设关系集为菱形,实体集为矩形)

        INSTRUCTOR ----- TEACHES ------ COURSE
      

      没有明确的箭头总是被认为是多对多的。所以,它是正确的(仅当我们认为两者相反时)

      【讨论】:

      • 有任何来源支持您的回答吗?
      【解决方案4】:

      考虑一个“员工”实体集和“部门”实体集,将关系设置为“管理”。 员工------------管理--------部门 (实体集) (关系集) (实体集) 一对多关系是指员工集合的一个实体可以与部门实体集合的多个实体相关联,但是部门集合的一个实体最多可以与员工实体集合的一个实体相关联。 这意味着如果员工和部门实体集之间存在一对多的关系,那么每个员工可以管理多个部门,同时每个部门最多由一个雇主管理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多