要理解这一点,您应该了解以下内容:
ER模型
关系模型
设计系统的ER图后,我们需要将其转换为关系模型,该模型可以由任何RDBMS(如Oracle,MySQL等)直接实现。在本文中,我们将讨论如何将ER图转换为不同场景的关系模型。
案例 1:具有 1:1 基数的二元关系,一个实体完全参与
一个人有 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 基数和两个实体部分参与的二元关系
男性与 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 基数的二元关系
在这种情况下,每个学生只能选修一门选修课,但一门选修课可以有多个学生。首先将每个实体和关系转换为表。学生表对应于学生实体,键为 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 基数
在这种情况下,每个学生可以报读 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:与弱实体的二元关系
在这种情况下,一名员工可以有多个受抚养人,一名受抚养人可以依赖一名员工。没有雇员,受抚养人就没有任何存在(例如,您作为孩子可以在他的公司依赖您的父亲)。所以它将是一个弱实体,它的参与将永远是完全的。弱实体没有自己的密钥。因此,它的密钥将是其标识实体的密钥(在本例中为员工的 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