【数据库设计】逻辑结构设计

E-R实体集的转换

概念结构设计之后就是对E-R图进行逻辑结构设计:即将E-R图转化成关系的过程。逻辑结构设计主要用于数据库管理系统上,为了让数据在计算机系统中更好地表示。

此设计过程用到的数据模型有:除了前面讲过的关系模型还有层次模型、网状模型;和属于基于对象的逻辑模型的E-R模型不同它们都属于基于记录的逻辑模型。

在转换过程中有些名词需要做一些“变更”:

实体(实体集)

实体(集)的属性

实体(集)的标识符

实体(集)之间的联系

关系模式(表头)

属性(列名)

键(主键、外键、复合键等)

关系表间的参照完整性约束

示例:

E-R联系的转换

根据E-R的联系类型:一元、二元、三元,需要分类进行转换。其中一元和二元的转换是类似的,而三元需要先变成二元联系而后根据二元的转换规则进行。故只进行二元联系转换的介绍:

注:在此之前,我们已经进行了第一步——E-R实体集的转换。

二元联系包括1:1、1:n(或n:1)、n:n。

二元联系转换

1:1联系转换

只需要在两个中任选一个关系加入另一个关系中的主键,并且加上该联系自带有的属性。比如:

假设有两个关系:

Student(Sno, Sname, Sgender, Sage, Sdept)、StuCard(StuCardID, Cardbalance, CardExp)。

那么转换之后:

Student(Sno, Sname, Sgender, Sage, Sdept, StuCardID)、StuCard(StuCardID, Cardbalance, CardExp)

或者是:

Student(Sno, Sname, Sgender, Sage, Sdept)、StuCard(StuCardID, Cardbalance, CardExp, Sno )

什么叫该联系自带有的属性?不是指原有的关系中就有的属性,而是关系之间的联系可能产生的新属性。比如这两个表之间的联系是“持有”,但这个并没有额外的属性产生,但也能实现转换。

1:n(或n:1)联系的转换

就是在n端加入1端的主键,并且加上该联系自带有的属性。

假如有两个关系:学校和学生的关系是1:n

Student(Sno, Sname, Sgender, Sage, Sdept)、School(SchoolID, SchoolName, SchoolLocation)

转换之后:

Student(Sno, Sname, Sgender, Sage, Sdept、SchoolID)、School(SchoolID, SchoolName, SchoolLocation)

倘若是1端加入n端的主键,将会出现1端(比如学校ID)重复冗余的情况。

这里的联系是“录取”,学校录取学生,同样地,这个联系也没有额外的属性产生。

n:m联系的转换

通过新建一个关系模式,并且这个关系模式的属性由原来两个关系模式的主键和它们的联系自带有属性构成。

假如有两个关系,分别是学生表和选课表,而转换之后就会是一个新的关系叫成绩表,由于原有的两个关系之间的联系是“选课”,即学生选课。则该联系所带有的属性可能是“学生的课程成绩”。那么就可以有如下的转换过程:

原先的两个关系:

Student(Sno, Sname, Sgender, Sage, Sdept)、Course(Cno, Cname, Cpno, Ccredit)

转换结果(新的关系模式):

SC(Sno, Cno, Grade)

其实上面的1:1和n:1类型都能使用类似于第三种的方式进行:即建立一个新的关系。

比如1:1

新的是Hold(Sno, StuCardID)此外还有Student(Sno, Sname, Sgender, Sage, Sdept)、StuCard(StuCardID, Cardbalance, CardExp)

比如1:n

新的是Admission(Sno, SchoolID)此外还有Student(Sno, Sname, Sgender, Sage, Sdept)、School(SchoolID, SchoolName, SchoolLocation)

三元联系转换

E-R图可能是这样的:

同样地,我们先按照概念结构设计的步骤先完成到二元的转换,即生成一个新的实体集叫“修读计划”,如图所示。那么转换过程就是:

原先:

学生关系 Student(Sno, Sname, Sgender, Sage, Sdept)

课程关系 Course(Cno, Cname, Cpno, Ccredit)

学校关系 School(SchoolID, SchoolName, SchoolLocation)

先变成二元联系:

新的实体集:修读计划关系 Plan(PlanID, PlanName)

转成二元关系:遵循“包含原关系的主键和联系自带有属性”

我们可以看到修读计划和其他三个原关系之间的联系是:修读计划和课程之间是多对多,因为一个修读计划可以包含多个课程,而一个课程也能被多个修读计划所包含;修读计划和学生之间也是多对多,因为一个修读计划可以被多个学生选择,而一个学生也可以选择多个修读计划(辅修、双学位等);修读计划和学校之间就是显然的多对一了。由于无论哪种联系都可以通过建立一个新的关系模式的方式来表示:于是就有了以下新关系:

包含关系 Contain(PlanID, Cno),指修读计划包含课程,

制定关系 MakePlan(PlanID, SchoolID)指修读计划由学校制定

选择关系 SelectPlan(PlanID, Sno)指修读计划供学生选择

以上联系没有产生额外的属性,故只需要原关系中各自的主键即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值