E-R模型及其设计规范

E-R模型概念

E-R(entity-relationship)模型有三个基本概念:实体集,联系集和属性。

实体集

实体集的思想可以类比面向对象的思想,每一个实体就是一个对象,而有相同属性的一些实体在一起就构成了实体集(类比对象到类的抽象过程)。而对于一些属于同一个实体集的实体的集合,使用术语实体集的外延来表示。
实体集不必互不相交。

联系集

联系指多个实体间的相互关联,联系集即相同联系的集合,正规地说,联系集是多个实体集之间的关系。使用术语:实体集E1, E2···参与联系集R。参与联系集的实体集的数目称为

非二元联系集转化为二元联系集

一个非二元联系集总可以转化为一组二元联系集,以三元联系集R为例,他将实体集A、B、C联系起来。

用实体集E替代联系集R,并创建三个联系集:RA,关联E和A;RB,关联E和B;RC,关联E和C。
如果R有属性,则将这些属性赋给E。针对联系集中的每个联系(ai, bi. ci),都在实体集E中创建一个新的实体ei。最后在三个新的联系集中,分别插入如下新联系:在RA中插入(ei, ai),在RB中插入(ei, bi),在RC中插入(ei, ci)。

属性

属性的取值范围称为,属性可以有以下分法:

简单属性和复合属性

复合属性如name可以包括first_name和last_name。

单值属性和多值属性

多值属性如一个人可以有不同多个的手机号,用花括号将属性括起来以表示其是一个多值属性,如{phone_number}。一般对多值属性的数目会设置上下界。

派生属性

派生属性的值可以从其他属性或实体中派生而来。例如属性date_of_birth就可以是age的派生属性,通过当前时间和age可以计算出date_of_birth。

派生属性的值并不储存,而是在需要时计算出来。

E-R模型约束

映射基数

映射基数表示一个实体通过一个联系集可以关联的实体的个数。在二元联系集上,有一对一、一对多、多对一和多对多四种情况。

实体集和二元联系集之间的一条边可以有一个关联的最大和最小的映射基数,用l. .h的形式表示,其中l表示最小的映射基数,h表示最大的映射基数。*则表示没有限制。

如:考虑实体集student和teacher,联系集advisor(导师)的情况。
基数约束
在advisor和student间的边上有1. .1的基数约束表示一个学生必须有且仅有一个导师
从advisor到teacher边上的约束0. .*表示教师可以有0或多个学生

参与约束

如果实体集E中的每个实体都参与到联系集R中的至少一个联系中,则称E在R中的参与是全部(total) 的,反之,不是每个实体都参与则称为部分的。

弱实体集

有主码的实体集称为强实体集,而所有属性一起都不能形成主码的实体集称为弱实体集。
弱实体集必须与另一个称作标识(identifying)属主实体集(owner entity set) 的实体集关联才有意义。他们之间的联系称为标识性联系。标识性联系从弱实体集到标识实体集是多对一的,且弱实体集是全部参与的。

弱实体集的主码由标识实体集的主码加上弱实体集的分辨符构成(即弱实体集的分辨符的定义就是其主码减去标识的主码)。

一些建立E-R模型时的规则

  • 避免一个实体集的主码出现在其他实体集中,他们之间的联系应该用联系集代替。
  • 如果弱实体集只参与标识性联系,且其属性不多时,将其表示为一个属性更加恰当。
  • 如果有复合属性,不应该创建一个复合属性,而是为每个子属性创建一个单独的属性。
  • 对于多值属性,应该为其创建新的关系模式。例如一个teacher有多个phone_number的情况,应该创建一个新的关系teacher_phone(ID, phone_number)。
  • 当描述实体间的行为时采用联系集。
  • 避免将联系隐藏在属性中。
  • 一对一或一对多联系集的属性可以放到一个参与该联系的实体集中,前者放到两个实体集中都可以,后者要放到”多“的那边。
    如:

    将联系配偶定义为一个新的关系,配偶(丈夫员工号,妻子员工号)。

    将联系选修定义为一个新的关系,选修(学号,课程号)。

设计规范

函数依赖

下面的概念中用希腊字母(如α)表示属性集,用αβ表示α ∪ \cup β。当属性集是一个超码时用K表示,用单个小写字母(如r)表示关系,用r( R )表示一个关系模式,该模式是关系r的,R是其属性集。

定义

考虑一个关系模式r( R ),令α ⊆ \subseteq R且β ⊆ \subseteq R。

  • 给定r( R )一个实例,我们说实例满足函数依赖α→β的条件是:对于实例中所有元组对t1,t2,满足若t1[α] = t2[α],则t1[β] = t2[β]。
  • 如果r( R )的每个实例都满足函数依赖,则称该函数依赖在模式r( R )上成立

特殊的,当函数依赖K→R在r( R )上成立时,K是r( R )的一个超码。
对于属性组A→属性β,若β依赖于A的所有属性,则称为完全函数依赖;若只依赖于其中一部分,则称为部分函数依赖

在所有关系中都成立的函数依赖称为平凡的(trivial),一般地,若β ⊆ \subseteq α,则函数依赖α→β是平凡的。

闭包

若r( R )的每个满足函数依赖集F的实例也满足函数依赖f,则称R上的f被r上的F逻辑蕴涵。例如:给定关系模式r(A,B,C)及函数依赖集:A→B,B→C。那么函数依赖A→C被逻辑蕴涵。
对于函数依赖集F,用F+表示F的闭包(closure),即:能够从F推导出的所有函数依赖(即被F逻辑蕴涵)的集合。

函数依赖理论遵循以下几个规则:

  • 自反律:若β ⊆ \subseteq α,则α→β
  • 增补律:若α→β,则γα→γβ
  • 传递律:若α→β,β→γ,则α→γ
  • 合并律:若α→β,α→γ,则α→γβ
  • 分解律:若α→βγ,则α→β且α→γ
  • 伪传递率:若α→β,βγ→δ,则αγ→δ

范式

第一范式

如果属性的域中的元素是不可再分的单元,则称该域是原子的。如果一个关系模式R中的所有属性的域都是原子的,则称该关系模式属于第一范式(1NF)。关系数据库一定是满足第一范式的。

第二范式

在第一范式的基础上消除了非主属性对主码的部分函数依赖。

主属性

BC范式

定义

Boyce-Codd范式可以消除所有基于函数依赖能够发现的冗余。具有函数依赖集F的关系模式满足BCNF的条件是:对F+中所有形如α→β的函数依赖,下面至少成立一项:

  • α→β是平凡的(即β ⊆ \subseteq α)
  • α是模式R的一个超码
分解为BCNF

对于一个不满足BCNF的关系模式R,至少存在一个非平凡的α→β。用以下两个关系模式取代R:

  • (α ∪ \cup β)
  • (R - (β - α))

有时一次分解不能得到最终结果,需要多次迭代。

3NF

3NF是一个比BCNF放宽了约束的范式,它允许左侧不是超码的非平凡函数依赖。因此满足BCNF一定满足3NF,反之不一定。
具有函数依赖集F的关系模式满足BCNF的条件是:对F+中所有形如α→β的函数依赖,下面至少成立一项:

  • α→β是平凡的(即β ⊆ \subseteq α)
  • α是模式R的一个超码
  • β - α中的每个属性A都包含于R的一个候选码中。

满足3NF的关系模式的所有非主属性都不传递依赖于主码。

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值