ER图的最小化介绍和详细指南

2021年3月22日15:24:19 发表评论 915 次浏览

实体关系(ER)图是数据库中数据的图形表示, 它显示了数据之间的关系。

注意:本文适用于那些已经知道什么是ER图以及如何绘制ER图的人。

1)当ER图中存在一对多基数时。

例如, 一个学生只能注册一门课程, 但是许多学生可以注册一门课程

many2one

对于Student(SID, Name), SID是主键。对于课程(CID, C_name), CID是主键

Student                           Course 
        (SID   Name)                    ( CID   C_name )
        --------------                  -----------------
          1      A                        c1      Z
          2      B                        c2      Y
          3      C                        c3      X
          4      D

              Enroll 
            (SID   CID)
             ----------
             1       C1
             2       C1
             3       c3
             4       C2

现在的问题是, 注册SID或CID或组合的主键应该是什么。正如你在注册具有多个SID的相同CID时看到的那样, 我们无法将CID作为主键。 (SID, CID)可以唯一区分表, 但不是最小的。因此, SID是关系注册的主键。

对于上面的ER图, 我们考虑了数据库中的三个表

Student 
Enroll
Course

但是我们可以合并重命名为Student_enroll的Student和Enroll表。

Student_Enroll 
                ( SID   Name   CID )
                ---------------------
                  1      A      c1
                  2      B      c1
                  3      C      c3
                  4      D      c2

现在学生表和注册表已合并。

因此, 对于Student_enroll和Course, 至少需要两个DBMS表。

注意:在一对多关系中, 我们至少可以有两个表。

2.当ER图中存在多对多基数时。

让我们考虑上面的例子, 现在学生也可以注册一门以上的课程。

many2many
Student                            Course
( SID   Name)                    ( CID   C_name )
--------------                  -----------------
   1      A                        c1      Z
   2      B                        c2      Y
   3      C                        c3      X
   4      D

              Enroll 
           ( SID   CID )
             ----------
             1       C1
             1       C2
             2       C1
             2       C2
             3       c3
             4       C2

现在, 如果我们仔细分析Enroll的Enroll主键, 那么同样的问题是Enroll关系的主键是什么?

表是(SID, CID)。

但是在这种情况下, 我们无法将Enroll表与Student和Course中的任何一个合并。如果我们尝试将Enroll与任何Student and Course合并, 则会创建多余的数据。

注意:多对多关系中至少需要三个表。

3.一对一的关系

有两种可能性

A)如果我们有一对一的关系, 并且至少有一个整体参与。

例如, 考虑下面的ER图。

一个人

A1和B1分别是E1和E2的主键。

在上图中, 我们在E1端有全部参与。

在这种情况下, 只需要一个表, 并将主键E1作为其主键。

由于E1完全参与, 因此E1中的每个条目仅与E2中的一个条目相关, 但E2中并非所有条目都与E1中的条目相关。

应该允许E1的主键作为精简表的主键, 因为如果使用E2的主键, 那么它在精简表中的许多条目可能具有空值。

注意:只需要一张桌子。

B)没有完全参与的一对一关系。

一个2个

A1和B1分别是E1和E2的主键。

R的主键可以是A1或B1, 但是我们仍然不能将所有三个表合并为一个。如果这样做, 则组合表中的某些条目可能具有NULL条目。因此, 将所有三个表合并为一个的想法不是很好。

但是我们可以将R合并为E1或E2。因此, 至少需要2张桌子。

以下是关卡上一年的问题。

如果发现任何不正确的地方, 或者你想分享有关上述主题的更多信息, 请发表评论

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: