【笔记】计算机科学导论——数据库概论

1.引言

  数据的存储传统上是使用单独的没有关联的文件,有时称为平面文件。

  • 定义:数据库是一个组织内被应用程序使用的逻辑相一致的相关数据的集合。

  • 数据库的优点

  1. 冗余较少
  2. 避免不一致性
  3. 效率
  4. 数据完整性
  5. 机密性
  • 数据库管理系统

  数据库管理系统是定义、创建、维护数据库的一种工具。DBMS也允许用户来控制数据库中数据的存取。数据库管理系统由5部分构成:硬件、软件、数据、用户和规程。


【笔记】计算机科学导论——数据库概论

1. 硬件
硬件是指允许物理上存取数据的计算机硬件系统
2. 软件
软件是指允许用户存取、维护和更新物理数据的实际程序。软件工具还可以控制那些用户可以对数据库中的哪部分数据进行存取。
3.数据
数据库中的数据存储在物理存储设备上。数据是独立于软件的一个实体。这种独立使得组织可以在不改变物理数据及其存取方式的情况下,更换所应用的软件。
4.用户
用户分为两类:最终用户和应用程序。
(1)最终用户
最终用户是指直接从数据库中获取信息的用户。最终用户又可分为两类:数据库管理员(DBA)和普通用户。
(2)应用程序
数据库中数据的其他使用者就是应用程序。应用程序需要存取和处理数据。
5.规程
必须被明确定义并未数据库用户所遵循的规程或规则的集合。


2.数据库体系结构

数据库系统有三层体系结构:内层、概念层和外层


【笔记】计算机科学导论——数据库概论

  • 内层
      内层决定了数据在存储设备中的实际位置。这个层次处理低层次的数据存取方法和如何在存储设备间传输字节。内层直接与硬件交互。
  • 概念层
      概念层定义数据的逻辑视图。在该层中定义了数据模式。数据库管理系统的主要功能(如查询)都在该层。概念层是中介层,它使得用户不必与内层打交道。
  • 外层
      外层直接与用户(最终用户或应用程序)交互。它来自概念层的数据转化为用户所数据的格式和视图。

3.数据库模型

  数据库模型定义了数据的逻辑设计,它也描述了不同数据之间的联系。历史上曾使用过三种数据库模型:层次模型、网状模型和关系模型。前两种已经过时。

  • 层次模型

  层次模型中,数据被组织成一颗倒置的树。每一个实体可以有不同的子节点,但只能有一个双亲。层次的最顶端有一个试题,称为根。


【笔记】计算机科学导论——数据库概论

  • 网状模型
      网状模型中,实体通过图来组织,图中的部分实体可以通过多条路径来访问,这里没有层次关系。


    【笔记】计算机科学导论——数据库概论

  • 关系模型
      关系模型中,数据组织成称为关系的二维表,这里没有任何层次或网络结构强加于数据上,但表或关系相互关联。


    【笔记】计算机科学导论——数据库概论
      关系模型是数据库设计中最常用的模型。


4.关系数据库模型

  在关系数据库管理系统(ROBMS)中,数据是通过关系的集合来表示的。

  从表面上看,关系就是二维表。在关系数据库管理系统中,数据的外部试图就是关系或表的集合,但这并不代表数据以表的形式存储。数据的物理存储与数据的逻辑组织的方式毫无关系。

  关系数据库管理系统中的关系有下列特征:

  • 名称:在关系数据库管理系统中,每一种关系具有唯一的名称
  • 属性:关系中的每一列都称为属性,属性在表中是列的头。每一个属性表示了存储在该列下的数据的含义。表中的每一列在关系范围内具有唯一的名称。关系中属性的总数成为关系的
  • 元组:关系中的行叫做元组。元组定义了一组属性值。关系中元组的个数叫做关系的基数。当增加或减少元组时,关系的基数就会改变。这就实现了动态数据库。

5.关系的操作

  在关系数据库中,我们可以定义一些操作来通过已知的关系创建新的关系。我们可以定义9种基本的操作:插入、删除、更新、选择、投影、连接、并、交、差

  • 结构化查询语言
      结构化查询语言(SQL)是美国国际协会(ANSI)和国际标准组织(ISO)用于关系数据库上的标准化语言。这是一种描述性(不是过程化)的语言,这意味着使用者不需要一步步地编写详细的程序而只需声明它。

  • 插入
      插入是一元操作,它应用于一个关系。其作用是在表中插入新的元组。插入操作使用如下格式:

      insert into RELATION-NAME values (…,…,…)

  value子句定义了要插入的相应元组的所有属性。

  • 删除
      删除也是一元操作。根据要求删除表中相应的元组。删除操作使用如下格式:

      delete from RELATION-NAME where criteria


  删除的条件是有where子句定义的。
  • 更新
      更新也是一元操作,它应用于一个关系。用来更新元组中的部分属性值。更新操作使用如下格式;

      update RELATION-NAME
      set attribute1=value1,atribute2=value2,…
      where criteria


  要改变的属性定义在set子句中,更新的条件定义在where子句中。
  • 选择
      选择也是一元操作。它应用于一个关系并产生另一个新关系。新关系的元组(行)是原关系元组的子集。选择操作根据要求从原表中选择部分元组。选择操作使用如下格式:

      select *
      from RELATION-NAME
      where criteria


  星号(*)表示所有的属性都被选择。
  • 投影
      投影也是一元操作。它应用于一个关系并产生另外一个新关系。新表中的属性(列)是原表中属性的子集。投影操作所得到的新关系的元组属性减少,但元组(行)的数量保持不变。投影操作使用如下格式:

      select attribute-list
      from RELATION-NAME

  • 连接
      连接是二元操作。它基于共有的属性把两个关系组合起来。连接操作使用如下格式:

      select atribute-list
      from RELATION1,RELATION2
      where criteria

  属性表是两个输入关系的属性组合。条件明确地定义了作为相同属性的的属性。连接操作十分复杂并由很多变化。


  •   并也是二元操作。它将两个关系合并成一个新关系。不过这里对两个关系有一个限制,即它们必须拥有相同的属性。新关系中的每一个元组或者在第一个关系、第二个关系,或者在两个关系中皆有。并操作使用如下格式:

      select *
      from RELATION1
      union
      select *
      from RELATION2


  •   交也是二元操作。它对两个关系操作,创建一个新关系。和并操作一样,进行交操作的两个关系必须有相同的属性。交操作使用如下格式:

      select *
      from RELATION1
      intersecton
      select *
      from RELATION2


  •   差也是二元操作。它应用于具有相同属性的两个关系。生成的关系的元组是那些存在于第二个关系中而不在第二个关系中的元组。差操作使用如下格式:

      select *
      from RELATION1
      minus
      select *
      from RELATION2

  语句的组合
  SQL语言允许我们去组合前面介绍的语言,从数据库中抽取出更复杂的信息。


6.数据库的设计

  第一步通常涉及与数据库潜在的用户的面谈,去收集需要存储的信息和每个部门的存取需求。第二步就是剪力一个实体关系模型(ERM),这种模型定义了其一些信息需要维护的实体、这些实体的属性和实体间的关系。
  设计的下一步是基于使用的数据库类型的。在关系数据库中,下一步就是建立基于ERM的关系和规范化这些关系。

  • 实体关系模型
      在这一步,数据库设计者建立了实体关系(E-R)图来表示那些其信息需要保存的实体和实体间的关系。E-R图使用了多种集合图形,但这里只使用其中的少部分:
    • 矩形表示实体集
    • 椭圆形表示属性。
    • 菱形表示关系集。
    • 线连接属性和实体以及连接实体集和关系集。

  关系(用菱形表示的)可以是一对一、一对多、多对一和多对多。

  • 从E-R图到关系
      1.实体集上的关系
      对于E-R图中的每个实体集,我们都创建一个关系(表),这些关系具有n个列,对应于这个集合所定义的n个属性。
      2.关系集上的关系
      对于E-R图中的每个关系集,我们都创建了一个关系(表),这个关系中有一个列对应于这个关系所涉及的实体集的关键字,如果关系有属性,这个关系还可以有关系本身的属性对应的列。

  • 规范化
      规范化是一个处理过程,通过此过程给定的一组关系转化成一组具有更坚固结构的新关系。规范化要允许数据库中表示的任何关系,要允许像SQL这样语言去使用由原子操作组成的恢复操作,要移除插入、删除、更新操作中的不规则,要减少新的数据类型被加入时对数据库重建的需要。
      规范化过程定义了一组层次范式(NF)。多种范式已经被提出,包括1NF,2NF,3NF,BCNF(Boyce-Codd范式),4NF,PJNF(Projection/Joint范式)和5NF等。这些范式形成了一个层次结构,如果一个数据库中的关系是3NF,那它首先应该是2NF。
      1.第一范式(1NF)
      当我们把实体或关系转换成表格格式的关系时,可能有些关系的行或列的交集有多个值。可以通过重复有问题的行来进行规范化。
      2.第二范式(2NF)
      在每个关系中,我们需要有一个关键字(称为主键),所有的其他的属性(列值)都依赖于它。但是,当关系是根据E-R图建立时,我们可能有一些复合的关键字(两个或两个以上的关键字的组合)。在这种情况下,如果每一个非关键字属性都依赖与整个复合关键字,那么这个关系就是第二范式的。
      如果有些属性只依赖于复合关键字的一部分,那这个关系就不是第二范式的。
      3.其他范式
      其他范式使用属性间更为复杂的依赖关系。


7.其他数据库模型

  另两种通用的模型是:分布式数据库面向对象数据库

分布式数据库
  分布式数据库模型实际上并不是一个新的模型,它是基于关系模型的。只不过,数据库中的数据存储在一些通过因特网(或一些私有的广域网)通信的计算机上。每台计算机(或者站点)拥有部分或全部数据库。即,数据或者是分别存储在每个站点或者是为每个站点所复制。

  1.不完全的分布式数据库
  在不完全的分布式数据库中,数据是本地化的。本地使用的数据存储在相应的站点上。访问大部分情况下是本地的,但偶尔优势全局的。虽然站点对存储的本地数据具有完全控制权,但是通过因特网或广域网,还存在一个全局的控制。
  2.复制式的分布式数据库
  在复制式的分布式数据库中,每个站点都有其他站点的一个完全副本。对一个站点数据的修改将会在其他站点的副本数据上重复。
  3.面向对象数据库
  面向对象数据库在试图保留关系模型优点的同时允许应用存取结构化数据。在面向对象数据库中,定义了对象和它们的关系。另外,每一个对象可以具有属性并以域的形式表达。
  4.XML
  通常用作面向对象数据的查询语言是XML。起初XML是用来给文本文档增加标记信息的,但它还应用于数据库查询语言。XML能用嵌套结构表示数据。