E-R模型
实体(Entity):是指客观存在可以相互区别的事务。实体可以是具体的
对象,如:一个工厂职工,一辆汽车等;也可以是 抽象的事件,如一次借书,
一场足球赛等。
实体型使用矩形表示如:
联系(Relationship)
1:1联系: 如果实体集E1中的每个实体最多只能和实体集E2中的一个实体有联系,反之亦然,那么实体集E1对E2的联系就是称为“一对一联系”,记为“1:1”。
M:N联系: 如果实体集E1中每个实体与实体集E2中(零个或多个)实体有联系,反之亦然,那么E1
对E2的联系是“多对多联系”,记为“M:N”。
这是一份关于商店商品仓库的ER图。
先看仓库和商品之间是M:N的关系,于是我们首先想到的应该是把联系 库存转换为库存实体。
库存 (仓库 ,商品 ,日期,库存量)
然后是商品实体和仓库实体
商品(商品 ,商品名,单价)
仓库(仓库 ,仓库名,地址)
除此之外仓库和商品还有一个供应关系,同样是M:N关系:
供应 (仓库 ,商品 ,月份,月供应量)
在上图的商店和仓库之间的关系可能写漏了,但是它们应该也是M:N的关系,一个商店可以被多个仓库供应,一个仓库也可以供应多个商店。上面已经创建了供应实体,现在只需在供应实体中假如商店 即可,也就是商店实体的主键。
供应(仓库 ,商品 ,商店 ,月份,月供应量)
商店(商店 ,商店名,地址)
键(码)、函数依赖及范式
超键:在关系模式中,能唯一标识元组的属性集称为超键。
候选键:在关系模式中,能唯一标识元组且不含多余属性的属性集称为候选键。
超键与候选键的区别是候选键可能含有多余元素
主键:在一个关系的若干个候选键随意选择一个关键字,这个关键字就是主键。
外键:如果关系模式R1中的某属性集不是R1的候选键,而是关系模式R2的候选键,
则这个属性集对模式R1而言是外键,注意这不是对于R2而言的。
二、6个范式
好了,上面已经介绍了我们掌握范式所需要的全部基础概念,下面我们就来讲范式。首先要明白,范式的包含关系。一个数据库设计如果符合第二范式,一定也符合第一范式。如果符合第三范式,一定也符合第二范式…
第一范式(1NF):属性不可分。
在前面我们已经介绍了属性值的概念,我们说,它是“不可分的”。而第一范式要求属性也不可分。那么它和属性值不可分有什么区别呢一个例子:
Ps:这个表中,属性值“分”了。
Ps:这个表中,属性 “分”了。
这两种情况都不满足第一范式。不满足第一范式的数据库,不是关系数据库!所以,我们在任何关系数据库管理系统中,做不出这样的“表”来。(也就是说,只要是关系数据库就是第一范式)
第二范式(2NF):符合1NF,并且,非主属性完全依赖于码。
听起来好像很神秘,其实真的没什么。
一个候选码中的主属性也可能是好几个。如果一个主属性,它不能单独做为一个候选码,那么它也不能确定任何一个非主属性。给一个反例:我们考虑一个小学的教务 管理系统,学生上课指定一个老师,一本教材,一个教室,一个时间,大家都上课去吧,没有问题。那么数据库怎么设计学生上课表)
一个学生上一门课,一定在特定某个教室。所以有(学生,课程)->教室
一个学生上一门课,一定是特定某个老师教。所以有(学生,课程)->老师
一个学生上一门课,他老师的职称可以确定。所以有(学生,课程)->老师职称
一个学生上一门课,一定是特定某个教材。所以有(学生,课程)->教材
一个学生上一门课,一定在特定时间。所以有(学生,课程)->上课时间
因此(学生,课程)是一个码。
然而,一个课程,一定指定了某个教材,一年级语文肯定用的是《小学语文1》,那么就有课程->教材。(学生,课程)是个码,课程却决定了教材,这就叫做不完全依赖,或者说部分依赖。出现这样的情况,就不满足第二范式!
有什么不好吗可以想想:
1、校长要新增加一门课程叫“微积分”,教材是《大学数学》,怎么办生还没选课,而学生又是主属性,主属性不能空,课程怎么记录呢,教材记到哪呢……郁闷了吧插入异常)
2、下学期没学生学一年级语文(上)了,学一年级语文(下)去了,那么表中将不存在一年级语文(上),也就没了《小学语文1》。这时候,校长问:一年级语文(上)用的什么教材啊…郁闷了吧删除异常)
3、校长说:一年级语文(上)换教材,换成《大学语文》。有10000个学生选了这么课,改动好大啊!改累死了……郁闷了吧修改异常)
那应该怎么解决呢影分解,将一个表分解成两个或若干个表
学生上课表新
课程的表
第三范式(3NF):符合2NF,并且,消除传递依赖
上面的“学生上课表新”符合2NF,可以这样验证:两个主属性单独使用,不用确定其它四个非主属性的任何一个。但是它有传递依赖!
在哪呢题就出在“老师”和“老师职称”这里。一个老师一定能确定一个老师职称。有什么问题吗想:
1、老师升级了,变教授了,要改数据库,表中有N条,改了N次……(修改异常)
2、没人选这个老师的课了,老师的职称也没了记录……(删除异常)
3、新来一个老师,还没分配教什么课,他的职称记到哪…(插入异常)
那应该怎么解决呢上面一样,投影分解:
BC范式(BCNF):符合3NF,并且,主属性不依赖于主属性
若关系模式属于第一范式,且每个属性都不传递依赖于键码,则R属于BC范式。
通常BC范式的条件有多种等价的表述:每个非平凡依赖的左边必须包含键码;每个决定因素必须包含键码。BC范式既检查非主属性,又检查主属性。当只检查非主属性时,就成了第三范式。满足BC范式的关系都必然满足第三范式。还可以这么说:若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。
一般,一个数据库设计符合3NF或BCNF就可以了。在BC范式以上还有第四范式、第五范式。
无损连接分解
有损:不能还原。
无损:可以还原。
无损联接分解
将一个关系模式分解成若干个分解模式后,通过自然连接和投影等运算仍能还原的原来的关系模式,则这种称为无损分解联接模式。
8.除(Division,用符 ÷表示)。R(X,Y)与关系S(Z),其中X,Y,Z为属性集合。假设Y和Z具有相同的属性个数且对应属性出自相同域。关系R(X,Y)÷S(Z)所得的商关系是关系R在属性X上投影的一个子集该子集和S(Z)的笛卡尔积必须包含在R(X,Y)
中,记为R÷S。
元组关系演算
在元组关系演算系统中,称 {t|Φ(t)} 为元组演算表达式。其中 t 是元组变量, Φ(t) 为元组关系演算公式,简称公式。
它由原子公式和运算符组成。
原子公式有三类:
(1) R(t)
R 是关系名, t 是元组变量。 R(t) 表示 t 是 R 中的元组。于是,关系 R 可表示为: {t|R(t)}
(2) t[i] θ u[j]
t 和 u 是元组变量, θ 是算术比较运算符。 t[i] θ u[j] 表示断言 “ 元组 t 的第 i 个分量与元组 u 的第 j 个分量满足比较关系 θ ” 。例如, t[2] < u[3] 表示元组 t 的第 2 个分量小于元组 u 的第 3 个分量。
(3) t[i] θ c 或 c θ t[i]
这里 c 是常量,该公式表示 “t 的第 i 个分量与常量 C 满足比较关系 θ” 。例如: t[4]=3 表示元组 t 的第 4 个分量等于 3 。
在关系演算中定义了 “ 自由元组变量 ” 和 “ 约束元组变量 ” 的概念。这些概念和谓词演算中的概念完全一样。若公式中的一个元组变量前有 “ 全称量词 ” 或 “ 存在量词 ” ,则称该变量为约束元组变量,否则称自由元组变量。
公式可以递归定义如下:
(l) 每个原子公式是公式。
(2) 如果 Φ 1 和 Φ 2 是公式,则 Φ 1 ∧ Φ 2 、 Φ 1 ∨ Φ 2 、 ﹁ Φ1 也是公式。分别表示:
① 如果 Φ 1 和 Φ 2 同时为真。则 Φ 1 ∧ Φ 2 才为真,否则为假;
② 如果 Φ 1 和 Φ 2 中一个或同时为真,则 Φ 1 ∨ Φ 2 为真,仅 Φ 1 和 Φ 2 同时为假时, Φ 1 ∨ Φ 2 才为假;
③ 如果 Φ 1 真,则 ﹁ Φ 1 为假。
(3) 若 Φ 是公式,则 nbsp;t(Φ) 也是公式。其中符 nbsp;是存在量词符 , nbsp;t(Φ) 表示:
若有一个 t 使 Φ 为真,则 nbsp;t(Φ) 为真,否则 nbsp;t(Φ) 为假。
(4) 若 Φ 是公式,则 nbsp;t( Φ ) 也是公式。其中符 nbsp;是全称量词符 , nbsp;t( Φ ) 表示:
如果对所有 t ,都使 Φ 为真,则 nbsp;t( Φ ) 必为真,否则 nbsp;t( Φ ) 为假。
(5) 在元组演算公式中,各种运算符的优先次序为:
① 算术比较运算符最高;
② 量词次之,且 nbsp;的优先级高于 nbsp;的优先级;
③ 逻辑运算符最低,且 ﹁ 的优先级高于 ∧ 的优先级, ∧ 的优先级高于 ∨ 的优先级;
④ 加括 时,括 中运算符优先,同一括 内的运算符之优先级遵循 ①②③ 各项。
(6) 有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。
一个元组演算表达式 {t|Φ(t)} 表示了使 Φ(t) 为真的元组集合。
关系代数的运算均可以用关系演算表达式来表示 ( 反之亦然 ) 。下面用关系演算表达式来表示五种基本运算:
(1) 并
R&nbs
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!