我爱编程Some Notes of Database System Concepts

Chapter 7 Database Design & E-R

2018-04-16  本文已影响0人  f饭饭f

数据库设计(Chap 7)

Some Concepts

Entity Sets

所有可明确识别的个体

具有相同属性的实体的集合

使用实体集的外延(extension)来表示属于实体集的实体的实际集合

实体集中每个成员的描述性性质,实体通过一组属性来表示

Relationship Sets

多个实体间的相互关联

相同类型联系的集合

实体集E1,E2,...参与联系集R

命名实体间的一个关联

实体在联系中所扮演的功能

若某个实体以不同的角色多次,则这类联系集是自环的(recursive)

recursive

联系也可以具有描述性属性(descriptive attribute),该属性描述的是联系本身

参与联系集的实体集的数量

Attribute

属性可取数值的集合

复合属性可以划分成更小的部分

比如:name→first_name, last_name

复合属性也可以有层次,即复合属性中有更小的复合属性

多值属性表示某个属性可以取不止一个的值

表示一个属性是多值的,可以用大括号括住

这类属性的值可以通过别的相关属性或实体派生出来

例如知道出生日期和现在的日期,就可以算出某人的年龄

这类属性的值不被存储,而是在需要的时候直接计算

可能是不适用(某个实体不存在这个属性)

可能是缺失(存在这个值但是我们不知道)

可能是unknown(不知道存不存在这个属性)


映射基数(mapping cardinality)

针对二元联系

参与约束

E中每个实体都参与到R的至少一个联系中

映射基数约束限定了一个实体与发生关联的另一端实体可能关联的数目上限

参与约束则限定了一个实体参与关联的数目下限(0或至少1)

一个实体集中个不允许有两个实体在所有属性上都有完全一样的值

直接用之前的主码,超码,候选码

超码

super key

主码

与映射基数有关

谁“多”就用谁的当主码

多对多的话,并集当主码

实体集中的冗余属性

如果两个实体集具有同一个属性,一个以该属性为主码,另一个不是,那么对于不以该属性为主码的实体集来说,该属性就是冗余的

这个和我们以前的理解不同,以前各个table之间需要一些相同的属性串在一起,但是table本身不是实体集,而更像是实体集和联系集的一个综合,所以不能混为一谈

准确来说,ER结构里的联系其实就取代了所谓的冗余属性


E-R图

非二元关系转二元关系

一般情况下,二元关系能够更好地表示,所以可以考虑进行转化

eg. parents(he, she, child)=> father(he, child), mother(she, child)

弱实体集

没有primary key的实体集(没有足够的能形成primary key)

必须要与一个标识/属主实体集关联才有意义

关联二者的联系称为identifying relationship

“主码”就是对应的属主实体集的主码+自身的分辨符

也叫部分码(partial key)

在某一尺度上能够成功标识实体

强实体集

有primary key的实体集


E-R模型设计

实体集or属性

设成实体集:除了这个本身还有额外的信息,也就是说可以叠加属性

设成属性:只对其名字或者单值感兴趣

实体集or联系集

描述发生在实体之间的行为时用联系集

属性or联系集

对象的语义独立性和减少数据冗余

二元orN元

一般情况用二元

但有的时候,有一些映射基数约束没办法用二元来表示

比如R从A、B到C是多对一的,来自A,B的每一对实体最多与一个C中的实体关联

这种没法用二元来表示


其他E-R

特化(specialization)

有点类似派生类

person可以特化为employee和student两个类

那么一个实体可能同时属于多个特化实体集

现在的用三角形加上ISA的特化

ISA

概化(generalization)

从多个实体集中抽取出其共性

有点类似基类

属性继承(inherit)

单继承:给定的实体集只参与到了一个ISA联系中

多继承:给定的实体集参与到多个ISA联系中,产生的结构被称为格(lattice)

概化与特化的约束

判断成员属于什么低层实体集

根据某些明确的条件来分派到不同的实体集中

更加动态,不是根据明确条件来的,可能仅仅是“人事调动”等等

一个实体是否可以属于多个低层实体集

一个实体只能属于一个低层实体集

eg. 本科生和研究生

一个实体可以属于多个低层实体集

eg. 工作组1,工作组2,……

完全性约束

每个高层实体必须属于一个低层实体集

允许某些高层实体不属于任何低层实体集

聚集

target:表达联系间的联系

通过聚集,把联系看成是一个高层实体集,可以对其做任何对实体集的操作

aggregate

数据库schema设计

E-R model

→tables→normalization of relations(检查冗余与异常的相关)


转换为关系模式(7.6)

强实体集

are flatten out by creating a separate attribute

主码:原关系主码+属性本身

外码约束:原关系主码

如果原关系只有主码B和多值属性M,那就没必要分两个table了

弱实体集

联系集

参与联系集的各个实体集的primary key

联系集自己的attributes

谁“多”谁主码,都“多”并集主码

如果“多”的那一端是partial,就有可能导致被合并所生成的属性出现null

泛化

为高层实体集和低层实体集都建表,然后通过相同的primary key连接

为高层实体集和低层实体集都建表,低层实体集包含高层实体集的全部内容

如果泛化是不相交且完全的,那就不需要为高层实体集建表了

聚集

对聚集的表示其实就相当于把那些联系集当实体集来看待

不需要单独去定义table,直接用对应的联系集的table就可以

上一篇下一篇

猜你喜欢

热点阅读