📜  从 ER 模型到关系模型的映射

📅  最后修改于: 2021-09-09 10:25:09             🧑  作者: Mango

要理解这一点,您应该了解以下内容:

ER模型

关系模型

设计系统的ER图后,我们需要将其转换为关系模型,该模型可以由任何RDBMS(如Oracle,MySQL等)直接实现。在本文中,我们将讨论如何将ER图转换为不同场景的关系模型。

案例 1:具有 1:1 基数的二元关系,一个实体完全参与

erm1

一个人有 0 或 1 个护照号码,而护照始终为 1 人所有。所以它是 1:1 的基数,完全参与约束来自 Passport。

首先将每个实体和关系转换为表。 Person 表对应于 Person 实体,键为 Per-Id。同样,Passport 表对应于 Passport Entity,密钥为 Pass-No。 Has Table 表示 Person 和 Passport 之间的关系(哪个人有哪个护照)。因此,它将从 Person 获取属性 Per-Id,从 Passport 获取 Pass-No。

Person   Has   Passport
Per-Id Other Person Attribute Per-Id Pass-No Pass-No Other PassportAttribute
PR1 PR1 PS1 PS1
PR2 PR2 PS2 PS2
PR3            

表格1

从表 1 中可以看出,每个 Per-Id 和 Pass-No 在Has表中只有一个条目。因此,我们可以将所有三个表合并为 1,其属性如表 2 所示。每个 Per-Id 将是唯一的且不为空。所以这将是关键。 Pass-No 不能是关键,因为对于某些人来说,它可以是 NULL。

Per-Id Other Person Attribute Pass-No Other PassportAttribute

表 2

案例 2:具有 1:1 基数和两个实体部分参与的二元关系

erm2

男性与 0 或 1 女性结婚,反之亦然。所以它是 1:1 的基数,两者都有部分参与约束。首先将每个实体和关系转换为表。男性表对应于男性实体,键为 M-Id。同样,女性表对应于女性实体,键为 F-Id。结婚表代表男性和女性之间的关系(哪个男性嫁给哪个女性)。所以它将从男性中获取属性 M-Id,从女性中获取 F-Id。

Male   Marry   Female
M-Id Other Male Attribute M-Id F-Id F-Id Other FemaleAttribute
M1 M1 F2 F1
M2 M2 F1 F2
M3         F3

表3

正如我们从表 3 中看到的,一些男性和一些女性不结婚。如果我们将 3 个表合并为 1 个,对于某些 M-Id,F-Id 将为 NULL。所以没有属性总是不为 NULL。所以我们不能将所有三个表合并为 1。我们可以转换为 2 个表。在表 4 中,已婚的 M-Id 将关联 F-Id。对于其他人,它将为 NULL。表 5 将包含所有女性的信息。主键已加下划线。

M-Id Other Male Attribute F-Id

表 4

F-Id Other FemaleAttribute

表 5

注意:如果两个实体部分参与关系,则基数为 1:1 的二元关系将有 2 个表。如果至少有 1 个实体完全参与,则所需的表数将为 1。

案例 3:与 n:1 基数的二元关系

erm3

在这种情况下,每个学生只能选修一门选修课,但一门选修课可以有多个学生。首先将每个实体和关系转换为表。学生表对应于学生实体,键为 S-Id。类似地,Elective_Course 表对应于 Elective_Course Entity,键为 E-Id。 Enrolls Table 表示 Student 和 Elective_Course 之间的关系(哪个学生就读哪个课程)。所以它将从 Elective_Course 中获取属性 S-Id 和学生 E-Id。

Student   Enrolls   Elective_Course
S-Id Other Student Attribute S-Id E-Id E-Id Other Elective CourseAttribute
S1 S1 E1 E1
S2 S2 E2 E2
S3   S3 E1   E3
S4   S4 E1      

表 6

正如我们从表 6 中看到的,S-Id 在 Enrolls 表中没有重复。所以它可以被认为是 Enrolls 表的一个键。 Student 和 Enrolls Table 的 key 是一样的;我们可以将其合并为一个表。结果表如表 7 和表 8 所示。主键已加下划线。

S-Id Other Student Attribute E-Id

表 7

E-Id Other Elective CourseAttribute

表 8

案例 4:与 m 的二元关系:n 基数

erm4

在这种情况下,每个学生可以报读 1 门以上的必修课,而一门必修课可以有 1 名以上的学生。首先将每个实体和关系转换为表。学生表对应于学生实体,键为 S-Id。类似地,Compulsory_Courses 表对应于以 C-Id 为键的必修课程实体。 Enrolls Table 表示 Student 和 Compulsory_Courses 之间的关系(哪个学生就读哪个课程)。所以它将从 Person 中获取属性 S-Id,从 Compulsory_Courses 中获取 C-Id。

Student   Enrolls   Compulsory_Courses
S-Id Other Student Attribute S-Id C-Id C-Id Other Compulsory CourseAttribute
S1 S1 C1 C1
S2 S1 C2 C2
S3   S3 C1   C3
S4   S4 C3   C4
      S4 C2      
      S3 C3      

表 9

从表 9 中可以看出,S-Id 和 C-Id 都在 Enrolls 表中重复。但它的组合是独一无二的;所以它可以被认为是 Enrolls 表的一个键。所有表的键都不同,不能合并。所有表的主键都带有下划线。

案例 5:与弱实体的二元关系

erm5

在这种情况下,一名员工可以有多个受抚养人,一名受抚养人可以依赖一名员工。没有雇员,受抚养人就没有任何存在(例如,您作为孩子可以在他的公司依赖您的父亲)。所以它将是一个弱实体,它的参与将永远是完全的。弱实体没有自己的密钥。因此,它的密钥将是其标识实体的密钥(在本例中为员工的 E-Id)及其部分密钥(D-Name)的组合。

首先将每个实体和关系转换为表。员工表对应于员工实体,键为 E-Id。类似地,Dependents 表对应于 Dependent Entity,其键为 D-Name 和 E-Id。有表表示雇员和家属之间的关系(哪个雇员有哪些家属)。因此,它将从员工中获取属性 E-Id,从家属中获取 D-Name。

Employee   Has   Dependents
E-Id Other Employee Attribute E-Id D-Name D-Name E-Id Other DependentsAttribute
E1 E1 RAM RAM E1
E2 E1 SRINI SRINI E1
E3 E2 RAM RAM E2
    E3 ASHISH ASHISH E3

表 10

 从表 10 中可以看出,E-Id、D-Name 是Has和 Dependents 表的关键。所以我们可以将这两个合并为 1。因此结果表显示在表 11 和 12 中。所有表的主键都带有下划线。

E-Id Other Employee Attribute

表 11

D-Name E-Id Other DependentsAttribute

表 12