实体集
矩形
相似实体(抽象对象)的集合
属性
椭圆
实体具有的性质
联系
菱形
两个或多个实体集的联系
子类
isa联系(一对一)
三角形
变与子类相连,对角与父类相连
A isa B表示A是B的子类
键
属性下面下划线
引用完整性
尖箭头时 多对一,一对一这里的一指的是至少对应一个
圆箭头时 指必须有一个(也就是引用完整性)
弱实体集
双矩形
双菱形表示一个多对一联系(支持联系),(支持实体集)为弱实体集提供键(一那边要用圆箭头)
提供的也必须得是支持实体集的键属性
联系集
连接n个实体集E1,E2,……En的联系R的一个实例由(e1,e2,……,en)的有限集构成,每个ei都是从实体集Ei的当前实例中选出
这个元组集就是R的联系集
R是从E到F的多对一联系:
E中的任一实体可以通过R与F中至多一个实体联系
表示成E——>F
R是一对一联系:
R即是E到F的多对一联系又是F到E的多对一联系
表示成E<——>F
R是多对多联系
R既不是E到F的多对一也不是F到E的多对一
表示成E——F
多路联系
从联系菱形到它涉及的每个实体集的连线
指向实体集E的箭头表示:如果从该联系的其他每个实体集中选择一个实体,它们至多与E中的一个实体联系
联系中的角色
在一个联系中一个实体集可能出现多次
把联系与实体集用同样多的边连接起来,在边上取名字表示实体集代表的不同角色
联系的属性
直接加在联系上,或再创建一个实体集包含联系的属性
多路联系到二元联系的转换
连接实体集:实体是多路联系的联系集的元组(内容和联系集是一样的)
从连接实体集中引出多对一联系
子类
isa联系
每个子类有它自己特殊的属性/联系
根的键也是所有节点的键,但节点的键可以是其子集。
E/R模型设计原则
1.忠实性:忠实于应用的具体要求
2.避免冗余(额外空间,更新异常)
3.简单性
4.选择正确的联系:一个联系连接起来的实体对或实体集可以从一个或多个其他的
联系中导出。比如多个联系代表相同的信息或者一个联系可以
从另外几个联系中导出。
5.选择正确的元素种类:将实体集E用属性代替的条件是
1)E必须是联系中的一
2)若E有几个属性,必须没有属性依赖于其它属性
3)没有联系包含E多次
代替方法:
a)若又从F到E的多对一联系R,删除R把E的属性作为F
的属性
b)若有多路联系R的箭头指向E,把E的属性作为R的属
性,删除R到E的弧
约束
1.键
2.引用完整性
3.度约束:在连接一个联系到一个实体的边上加一个数字,表示相关实体集中任一
实体可被联系到的实体数目的约束。
弱实体集
键由另一个实体集的部分或全部键属性构成
若支持实体集F本身就是弱实体集,就再往上找F的支持实体集G提供给F的键属性
若从E到F有多个不同的支持联系,那么每个联系被用来提供一份F的键的拷贝以帮助E形成键
从E/R图到关系设计
直观方法:
1.每个实体集可转化为具有相同属性的关系
2.联系转化成的关系,关系属性为联系所连接的实体集的键集合以及联系自身的属性(注意一个实体集在联系中以不同角色出现多次的情况,它的键属性出现次数应和角色数一样多,并且要重命名)
特殊情况:
1.弱实体集不能直接转化为关系
2.isa联系与子类要特殊对待
3.有时将关系组合:
考虑有E到F的多对一联系R,则可以把F的键还有R的属性添加到E
导出的联系中,这样就不用为R创建联系了
注意若e没有对应的f则关系中的对应分量应为空值
多对多就不要组合了,会冗余
找出关系中的键
若关系R是从(二元)联系转化而来,那么联系的多样性就会影响关系的键。
如果联系是多对多的,则与其相联的实体集的键属性都是R的键属性。stars-in (starName, title, year)。
如果联系是E1到E2的多对一,则只有E1(多方)的键属性是R的键属性。owns (title, year, studioName)。
如果联系是一对一的,则与其相连的任一个实体集的键属性都是它的键属性。 (键不唯一)
如果一个多路联系R有一个箭头指向实体集E,则相应关系中至少有一个键,不包含E的键。
Contracts(starName,title,year,salary,studiosName)
处理弱实体集
弱实体集自己的属性+支持实体集的键属性+支持联系的属性
与弱实体集W相连的联系要包含W的键属性,以及对W键有贡献的实体集属性
支持联系不用转
处理子类结构
isa联系不用转
E/R法 n+1
为子类实体集建立关系,并加上根的键属性-
面向对象法 2^n (减少空间 避免重复信息)
枚举层次中所有包含根的子树,为每个子树构造关系,包含子树中所有实体集的所有属性
面向对象法 空值法 (关系少,查询代价低)
对一个实体集层次只创建一个关系,包含层次中所有实体集的所有属性,允许元
组有null值