实体关系(ER)图是数据库中数据的图形表示, 它显示了数据之间的关系。
注意:本文适用于那些已经知道什么是ER图以及如何绘制ER图的人。
1)当ER图中存在一对多基数时。
例如, 一个学生只能注册一门课程, 但是许多学生可以注册一门课程
对于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图中存在多对多基数时。
让我们考虑上面的例子, 现在学生也可以注册一门以上的课程。
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)没有完全参与的一对一关系。
A1和B1分别是E1和E2的主键。
R的主键可以是A1或B1, 但是我们仍然不能将所有三个表合并为一个。如果这样做, 则组合表中的某些条目可能具有NULL条目。因此, 将所有三个表合并为一个的想法不是很好。
但是我们可以将R合并为E1或E2。因此, 至少需要2张桌子。
以下是关卡上一年的问题。
如果发现任何不正确的地方, 或者你想分享有关上述主题的更多信息, 请发表评论