📜  ER图的最小化

📅  最后修改于: 2021-09-10 02:26:41             🧑  作者: Mango

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

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

1) 当ER 图中存在一对多基数时。
例如,一个学生只能注册一个课程,但一个课程可以被多个学生注册

多对一

对于 Student(SID, Name),SID 是主键。对于 Course ( 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

现在的问题是,Enroll SID 或 CID 或组合的主键应该是什么。我们不能将 CID 作为主键,正如您在注册同一 CID 时看到的那样,我们有多个 SID。 (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 表现在合并了。

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

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

2. 当ER 图中存在多对多基数时。
让我们考虑上面的例子,现在一个学生也可以注册 1 门以上的课程。

多对多

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 和 Course 中的任何一个合并,它将创建冗余数据。

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

3. 一对一关系

有两种可能
A) 如果我们有一对一的关系并且我们至少在一端完全参与。

例如,考虑下面的 ER 图。

one2oneT

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

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

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

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

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

注意:只需要一张桌子。

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

一对一

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

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

但是我们可以将 R 合并为 E1 或 E2。所以至少需要 2 个表。

下面是 Gate 上一年的问题。
https://www.geeksforgeeks.org/gate-gate-cs-2008-question-82/
https://www.geeksforgeeks.org/gate-gate-cs-2008-question-83/