软件设计师-数据库

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):属性不可分。

  在前面我们已经介绍了属性值的概念,我们说,它是“不可分的”。而第一范式要求属性也不可分。那么它和属性值不可分有什么区别呢一个例子:

name tel age
大宝 13612345678 22
小明 13988776655 010-1234567 21

Ps:这个表中,属性值“分”了。

name tel age
手机 座机
大宝 13612345678 021-9876543 22
小明 13988776655 010-1234567 21

Ps:这个表中,属性 “分”了。

  这两种情况都不满足第一范式。不满足第一范式的数据库,不是关系数据库!所以,我们在任何关系数据库管理系统中,做不出这样的“表”来。(也就是说,只要是关系数据库就是第一范式

第二范式(2NF):符合1NF,并且,非主属性完全依赖于码。

  听起来好像很神秘,其实真的没什么。
  一个候选码中的主属性也可能是好几个。如果一个主属性,它不能单独做为一个候选码,那么它也不能确定任何一个非主属性。给一个反例:我们考虑一个小学的教务 管理系统,学生上课指定一个老师,一本教材,一个教室,一个时间,大家都上课去吧,没有问题。那么数据库怎么设计学生上课表)

学生 课程 老师 老师职称 教材 教室 上课时间
小明 一年级语文(上) 大宝 副教授 《小学语文1》 101 14:30

一个学生上一门课,一定在特定某个教室。所以有(学生,课程)->教室
一个学生上一门课,一定是特定某个老师教。所以有(学生,课程)->老师
一个学生上一门课,他老师的职称可以确定。所以有(学生,课程)->老师职称
一个学生上一门课,一定是特定某个教材。所以有(学生,课程)->教材
一个学生上一门课,一定在特定时间。所以有(学生,课程)->上课时间

  因此(学生,课程)是一个码。
  然而,一个课程,一定指定了某个教材,一年级语文肯定用的是《小学语文1》,那么就有课程->教材。(学生,课程)是个码,课程却决定了教材,这就叫做不完全依赖,或者说部分依赖。出现这样的情况,就不满足第二范式!
  有什么不好吗可以想想:
  1、校长要新增加一门课程叫“微积分”,教材是《大学数学》,怎么办生还没选课,而学生又是主属性,主属性不能空,课程怎么记录呢,教材记到哪呢……郁闷了吧插入异常)
  2、下学期没学生学一年级语文(上)了,学一年级语文(下)去了,那么表中将不存在一年级语文(上),也就没了《小学语文1》。这时候,校长问:一年级语文(上)用的什么教材啊…郁闷了吧删除异常)
  3、校长说:一年级语文(上)换教材,换成《大学语文》。有10000个学生选了这么课,改动好大啊!改累死了……郁闷了吧修改异常)
  那应该怎么解决呢影分解,将一个表分解成两个或若干个表

学生 课程 老师 老师职称 教室 上课时间
小明 一年级语文(上) 大宝 副教授 101 14:30

学生上课表新

课程 教材
一年级语文(上) 《小学语文1》

课程的表

第三范式(3NF):符合2NF,并且,消除传递依赖

  上面的“学生上课表新”符合2NF,可以这样验证:两个主属性单独使用,不用确定其它四个非主属性的任何一个。但是它有传递依赖!
  在哪呢题就出在“老师”和“老师职称”这里。一个老师一定能确定一个老师职称。有什么问题吗想:
  1、老师升级了,变教授了,要改数据库,表中有N条,改了N次……(修改异常)
  2、没人选这个老师的课了,老师的职称也没了记录……(删除异常)
  3、新来一个老师,还没分配教什么课,他的职称记到哪…(插入异常)
  那应该怎么解决呢上面一样,投影分解:

学生 课程 老师 教室 上课时间
小明 一年级语文(上) 大宝 101 14:30
老师 老师职称
大宝 副教授

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

来源:SekFu

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年3月1日
下一篇 2018年3月1日

相关推荐