重 点 提 示


数据库原理中涉及概念众多,比如,数据库的三级结构,分布式数据库系统,这些概念都很重要,可以参见“课程学习”部分,本版块只给出特别重要或容易混淆的内容

一、关系数据模型的基本概念

  • 实体、实体集、属性、属性值域、关系、元组、表、行、列、侯选键等概念。

  • 主键外键概念。以及关系与关系之间的联系的实现方法。   

        关系与关系之间的联系:通过公共属性公共属性是一个表的主键,是另一个表的外键。这是关系数据库的重要特点。

  • 关系模型可提供3种完整性约束:

        实体完整性参照完整性用户自定义的完整性

   其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称为关系完整性约束条件规则。




二、关系代数与关系数据库操作

   关系代数是关系数据库系统查询语言的理论基础。

  • 关系代数的9种操作:

     并、交、差、乘、选择、投影、联接、除、自然联接运算

五个基本操作:

   并()    差(-)     笛卡尔积(×)   投影(σ)   选择(π)

四个组合操作

   交()    联接(等值联接)   自然联接(RS)    除法(÷)

  • 关系代数表达式:

    由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。

关系代数(演算)要求掌握各种语句的应用,多做书中的例题可以帮助自己熟能生巧。

关系代数表达式举例

 

  • 关系代数表达式的优化:

  目的:为了系统在执行时既省时间又能提高效率。
  基本策略:先做选择,运用投影去除多余属性等等。
  优化算法:语法树(详见教材。尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)
    对于一些简单的代数表达式,直接用“尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值直接写出即可。

比如,设有三个关系:

    S(S#,SNAME,AGE,SEX)
    SC(S#,C#,GRADE)
    C(C#,CNAME,TEACHER)

关系代数表达式为:

              πS#,SNAMEGRADE>60(SSC))
优化为:πS#,SNAMES#,SNAME(S)πS#GRADE>60(SC)))

语法树举例

 

 

三、关系演算

    关系演算(把数理逻辑的谓词演算引入到关系运算中),该理论也应掌握。掌握的深度要求比关系代数略低一些。

  • 理解一些量词及符号的含义:、=>、∧、∨、┐

  • 元组演算表达式的一般形式为:{t|P(t)}


理解一些量词及符号的含义,理解元组表达式的含义就简单多了(要多作习题):

       比如,设有三个关系:
                S(S#,SNAME,AGE,SEX)
                SC(S#,C#,GRADE)
                C(C#,CNAME,TEACHER)

    {t|(u)(C(u)∧C[3]='LIU'∧t[1]=u[1]∧t[2]=u[2])}

可以这样理解:
      t是所求元组

      对于t ,存在元组U,U是关系C的一个元组并且C的第三个分量是“LIU",t的第一个分量等于U的第一个分量,t的第二个分量等于U的第二个分量

      综上,题意:检索LIU老师所授课程的课程号(第一个分量)、课程名(第二个分量)。

    

  • 域关系演算

    域演算表达式的一般形式为:{t1...tk|P(t1...,tk)}
    其含义为:这是一个域集合,其中每个域变量的取值关系满足公式P所规定的条件。


    元组关系表达式转换成域表达式:
(1)对于k元的元组变量t,引入k个域变量t1...tk,在公式中t用t1...tk替换,元组量t[i]用ti替换。
(2)对于每个量词(u)或(u),若u是m元的元组变量,则引入m个新的域变量u1...um。在量词的辖域内,u用u1...um替换,u[i]用ui替换,(
u)用(u1)...(um)替换,(u)用(u1)...(um)替换。

 

比如,{t|(u)(C(u)∧C[3]='LIU'∧t[1]=u[1]∧t[2]=u[2])}转换为

      {t1t2|(u1)(u2)(C(u1u2u3)∧u2='LIU'∧t1=u1∧t2=u2)}

 

   表达式的转换不用强记,关键要从语义上理解。

    比如,{t1t2|(u1)(u2)(C(u1u2u3)∧u3='LIU'∧t1=u1∧t2=u2)}

    可以这样理解:
      所求结果有t1、t2两个域,存在u1,u2与它们分别相等(u1,u2为关系C中两个域,对应的U3为
'LIU')。

  综上,题意:检索LIU老师所授课程的课程号(第一个域)、课程名(第二个域)。


四、SQL语言

结构化查询语句SQL是本教材的重点,应多做例题、习题加以领会。


1.SQL数据库的体系结构要点。 
2. SQL语言的四个主要部分。
3. 数据定义命令。

  • 建立数据库(模式):CREATE SCHEMA 命令。

  • 撤消数据库:DROP SCHEMA 命令 

        CASCADE(连锁式)、RESTRICT(约束式)的区别

       e.g.  ALTER TABLE S ADD ADDRESS VARCHAR(30)

             ALTER TABLE  S  DROP  AGE  CASCADE

             ALTER TABLE  S  DROP  AGE  RESTRICT

CASCADE为连锁删除,RESTRICT为约束删除,即没有对本列的任何引用时才能删除。

  • 建立视图的CREATE VIEW命令。

  • 撤消视图的DROP VIEW命令。


4. 索引的创建与撤消。

  • 建立索引的CREATE INDEX命令,学用UNIQUE建立唯一(性)索引。

  • 撤消索引的CREATE INDEX命令。

5.数据查询,要求达到综合应用的层次。
    用SELECT命令实现选择与投影操作,选择对应于WHERE子句,投影对应于SELECT子句。
对于条件表达式中要用到的所有运算符(关系、逻辑、特殊),都应使用。

  • 对输出的目标列进行排序的ORDER BY子句。

  • 消除重复的DISTINCT

  • SQL的数值函数(COUNT 、MIN 、MAX 、AVG 、SUM)和查询嵌套。

  • 按属性(列名)的值进行分组的GROUP BY子句。

  • 多表连接操作(联接查询、嵌套查询)

用SELECT命令表达查询的较完整的语法格式是:
        SELECT<目标表的列名或列表达式序列>
        FROM<表名序列>
        [WHERE<行条件表达式>]
        [GROUP BY<列名>
        [HAVING<组条件表达式>]]
        [ORDER BY<列名>[DESC],…];
其执行过程如下:
    (1) 读取FROM子句中表或视图的数据,执行笛卡尔乘积操作。
    (2) 选取满足WHERE子句中给出的条件表达式的元组。
    (3) 按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。
    (4) 按SELECT 子句中给出 的列名或列表达式求值输出。
    (5) 按ORDER子句对输出的目标表进行排序,按附加说明DESC降序排列,默认为升序排列。

6. SQL的数据更新

  • 插入(增加)一行或多行到表中的操作用INSERT  INTO命令。

  • 从表中删除行(元组)的操作用DELETE FROM命令。

  • 修改列值用UPDATE命令


事务提交用COMMIT命令,事务回滚用ROLLBACK命令。
注意UPDATE命令ALTER命令、DELETE命令与DTOP命令含义的不同



7. SQL中的完整性约束

  • PRIMARY KEY指明主键;

  • FOREIGN KEY…REFERENCES…指明外键和参照关系,即参照完整性规则。

  • 在属性值上的约束:非空值约束NOT NULLCHECK子句

  • 全局约束:CHECK子句;断言ASSERTIONS

举例:     断言          CHECK子句

 

五、ER模型

在E-R模型中,主要有实体、属性、联系三个部分组成。

含义

表示方式

实体

考虑问题的对象(学生)

属性

实体或联系的某一特性(姓名)

联系

实体之间的联系(学习)

  建立E-R图的过程如下:

    (1) 首先确定实体类型。

    (2) 确定联系类型(1:1,1:N,M:N)。

    (3) 把实体类型和联系类型组成E-R图。

    (4) 确定实体类型和联系类型的属性。

    (5) 确定实体类型的键,在属于键的属性名下划一条横线。

 E-R图示例

 



六、将ER模型转换成关系数据库


 ER模型转换关系数据库的 一般规则:
   (1) 将每一个实体类型转换成一个关系模式,实体的属性为关系模式的属性。
   (2) 对于二元联系,按各种情况处理,如下面所示。

二元关系

ER图

转换成的关系

联系的处理

主键

外键

1:1


(2个关系)
模式A
模式B


(有两种)

 
处理方式(1):
(1)把模式B的主键,联系的属性加入模式A


处理方式(2):

(2)把模式A的主键,联系的属性加入模式B
 

(略)

 


(依据联系的处理方式)


方式(1):
模式B的主键为模式A外键 

方式(2):
表A的主键为表B的外键

1:N


(2个关系)
模式A
模式B
 


把模式A的主键,联系的属性加入模式B
 

 

(略)

模式A的主键为模式B的外键

M:N


(3个关系)
模式A
模式B
模式A-B

联系类型转换成关系模式A-B;
模式A-B的属性:
(a)联系的属性
(b)两端实体类型的主键

两端实体类型的主键一起构成模式A-B主键

两端实体类型的主键分别为模式A-B的外键

    M:N联系的示例

    1:N联系的示例

 



七、函数依赖及范式

函数依赖基本概念:

函数依赖的公理系统:

    设有关系模式R(U),X,Y,Z,W均是U的子集,F是R上只涉及到U中属性的函数依赖集,推理规则如下:

  • 自反律:如果YXU,则X→Y在R上成立。

  • 增广律:如果X→Y为F所蕴涵,ZU,则XZ→YZ在R上成立。(XZ表示X∪Z,下同)

  • 传递律:如果X→Y和Y→Z在R上成立,则X→Z在R上成立。
    以上三条为Armstrong公理系统

  • 合并律:如果X→Y和X→Z成立,那么X→YZ成立。

  • 伪传递律:如果X→Y和WY→Z成立,那么WX→Z成立。

  • 分解律:如果X→Y和ZY成立,那么X→Z成立。
    这三条为引理   

注意:

  • 函数依赖推理规则系统(自反律、增广律和传递律)是完备的。

  • 由自反律所得到的函数依赖均是平凡的函数依赖。


四种范式的含义:

  • 如果某个数据库模式都是第一范式的,则称该数据库模式是属于第一范式的数据库模式。

  • 如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称为第二范式模式

  • 如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R为第三范式模式

  • 若关系模式R是第一范式,且每个属性都不传递依赖于R的候选键。这种关系模式就是BCNF模式

四种范式,可以发现它们之间存在如下关系:
        BCNF3NF2NF1NF

1NF
消去非主属性对键的部分函数依赖
2NF
消去非主属性对键的传递函数依赖
3NF
消去主属性对键的传递函数依赖
BCNF

 范式举例

 

模式分解

模式分解的三个准则:

  • 分解具有“无损连接性”
  • 分解要“保持函数依赖”
  • 分解既要“保持函数依赖”,又要具有“无损连接性”

 模式分解举例

 

模式分解与范式的关系

如果关系模式没有达到所需的范式,则需要模式分解

模式分解的几个重要事实:

  • 若只要求分解具有“无损连接性”,一定可以达到4NF;
  • 若要求分解要“保持函数依赖”,可以达到3NF,但不一定能达到BCNF;
  • 若要求分解既要“保持函数依赖”,又要具有“无损连接性”,可以达到3NF,但不一定能达到BCNF;

  


八、数据库的并发控制 


并发控制带来的三类问题
  (1)丢失更新的问题
  (2)不一致分析问题
  (3)“脏数据”的读出。(在数据库技术中,未提交的随后又被撤消的数据为“脏数据”。)

以上三类问题结合多事务的并行操作进行理解。

举例


    为解决并发控制带来的问题,通常要采用封锁(locking)技术,常用的封锁有:排它型封锁(X封锁)和共享型封锁(S封锁)两种。

并发控制中,有许多概念都要掌握:封锁,X封锁,S封锁,PX协议,PXC协议,PS协议,PSC协议,活锁,死锁,可串行化调度,不可串行化调度,两段封锁协议