数据库管理系统-读书笔记-1.4-1.7

1.4DB语言

1.       DDL  data-definition language用于定义数据库方案,DML data-manipulation language用于表达数据查询和查询。DDL和DML一般是同一种语言的两个组成部分,而不 是两种语言。

1.4.1 DML

2.       用于访问、操作按一定的数据模型组织好的数据,可访问方式有:

a)       增

b)       删

c)       改

d)       查

3.       大体分两类

4.       过程式DML:要求用户说明需要什么数据,以及如何获取数据。What and How

5.       声明式DML:也称非过程式DML,只说明需要什么数据,不用说明如何获取。

6.       声明式DML学习、使用都更方便,但要求数据库来确定合适、高效的访问数据的方式。

7.       用于获取信息的DML被称为查询语言。虽然并不严谨,但是在实践中,查询语言和DML指的是一回事。

8.       查询语言有很多种,SQL只是其中用得最为广泛的一种。

9.       前面提到的抽象层次对数据定义、组织以及操作都适用。在物理层,人们需要定义合适的算法来高效地访问数据,在更高的层次,人们强调的是使用的方便性,目标是提 高用户与系统互动的效率。DBMS的查询处理器将用户的DML查询翻译成物理层的一串操作。

1.4.2 DDL

10.   数据库的方案通过一组用DDL表达的定义来表示。此外,DDL还用于表示数据的一些附加属性。

11.   DDL中表示数据的存储与访问方法的语句被称为数据存储和定义语言。data storage and definition。 这些语句定义了数据库的实现细节,这些细节一般是向用户隐藏的。

12.   存储在DB中的数据的值必须满足某些特定的一致性约束consistency constraints 。比如账户余额不能为0,某门课的选课人数不能超过40.DDL提供了一些方法来实现这些 约束,每次进行更新时,DBMS都会去检查这些约束是否被满足了。虽然说约束可以是DB上的任何的断言Predicate。但是复杂的断言检测起来成本非常高。所以,DBMS 一般只实现那些检测成本较低的约束

a)     值域约束Domain Constraints。每个属性都必须有相应的值域(比如整型、字符串、日期)声明一个属性的值域就相当于约束了这个属性可取的值的范围。值域 约束是最基本的完整性约束。它们检测起来也比较容易。

b)     引用完整性Referential Integrity.有些时候,我们希望在一个关系里出现的一组属性值也出现在另一个关系里,这就是引用完整性。比如每门课程所属的学院必须真 实存在,也就是说course 表里出现的dept_name值必须都能在department表的dept_name属性中找得到。违反引用完整性约束的更新操作会被拒绝。

c)     断言 Assertions。断言是DB必须满足的某种条件。值域约束和引用完整性约束特殊形式的断言。还有些约束无法像它们这样简单地表达出来,比如 :每个学院 每 个学期必须开设至少5门课程。这个条件就必须用断言来表示。创建断言后,只能能满足该断言的操作才会被允许。

13.   DDL就像其他语言一样,有输入,也有输出,其输出都放在数据字典里,数据字典中包含元数据——数据的数据。数据字典是一类特殊的表,它们只能被DBMS本身访问和 更新。在读取或修改数据之前,DBMS会去查阅数据字典中相应的内容。

1.5关系数据库

14.   关系数据库基于关系模型来构建,使用一组表来表示数据以及数据间的关系,它还包含相应的DML、DDL。

1.5.1表

15.   每个表由多个列组成,列的名称唯一。

16.   关系模型是一种record-based model 基于记录的模型。基于记录的模型是指在这种模型中,数据库由一些固定格式的记录组成,这些记录分属于不同的类型。the database is structured in fixed-format records of several types

17.   一个表中包含属于某个特定类型的记录,每个类型的记录,或者说每个记录类型定义了一组字段(属性)。表的列对应记录类型的属性。

18.   表可以存储在文件中。可以使用逗号等来分隔一个记录的各个属性,然后用另一个分隔符如回车换行符来分隔不同的记录。关系模型向开发人员和用户隐藏这些底层的实 现细节。

19.   使用关系模型时,可能会创建出有问题的方案,比如可能会不必要的重复。如果instructor表中记录了老师所在学院的预算的话,每次学院的预算变动的时候,instructor表 中相应的老师的budget字段就得跟着变。

20.   2014年10月23日星期四

1.5.2 DML

1.       SQL的查询语言是非过程式的。一个查询的输入是一个或多个表,其输出则总是一个表。

select instructor.name

from instructor

where instructor.deptname=’History’;

2.      上面的查询的返回结果就是一个只有一列的表,列名为name,表中的每一行是历史系的老师的名字。

1.5.3 DDL

3.       DDL语句可用于创建表、完整性约束、断言等。

4.       创建表的DDL语句不光创建表,还会更新数据字典以记录表的元数据。

1.5.4通过应用程序访问数据库

5.       SQL并不是通用的图灵机,有些功能使用一般的应用程序能做到,但用SQL就不行。SQL不能接受用户输入、不能进行结果输出、也不支持网络通信。这些功能可通过 C、C++、Java等内嵌SQL的“宿主语言Host Language”来实现。使用这种方式与DB交互的程序就称为应用程序Application Program

6.       有两种方式来在应用程序内执行DML语句以访问数据库:

a)       提供一组API以向DB发送DML和DDL,并接收返回的结果。C的API是ODBC(Open Database Connectivity),Java的是JDBC

b)       扩展宿主语言的语法,以在宿主语言内部执行DML。一般会在DML语言前加一个特殊字符,然后使用预处理器——DML 预处理器——将DML语句转化成宿主语言 内的一般函数调用。

1.6 数据库设计

7.       使用数据库的目的是管理大批量的相互关联的信息。

8.       数据库设计主要是指DB Schema的设计。企业级的数据库应用环境的设计涉及更多的问题。本文只关注DB Schema的设计。

1.6.1设计的过程

9.       较高抽象层次的DB模型给DB设计人员提供了一个概念性的框架来描述用户的需求,以及如何组织数据库的结构以满足这些需求。

10.   因此设计的第一步是从数据库用户的角度描述对数据的需求,这一步工作需要设计人员与行业内的专家以及用户进行深入的交流才能完成。这一步的成果是用户需求说 明。

11.   第二步是选择数据模型,并通过使用该模型提供的那些概念,将前一步的需求说明转换成DB的概念性方案(Conceptual Schema)。这一阶段被称为概念设计。概念设计 阶段提出的方案提供了企业的detailed overview。设计人员城检查这个方案以确保所有的数据需求都没有遗漏,并且彼此间不冲突,另外,还可以删掉重复的内容。这一阶 段的主要任务是描述数据以及它们之间的关系而不是物理层次的存储细节。

12.   从关系模型的角度来看,概念设计告诉我们数据库中要记录哪些(What)属性,以及如何How组织这些属性以形成DB中的各张表。记录哪些属性由业务决定,本文不会 涉及,如何组织则是计算机科学领域内的问题。主要有两种方式来解决这个问题:

a)       使用ER模型Entity Relationship模型

b)       使用范式

13.   完整的概念设计描述了企业的全部功能需求。用户在“功能需求说明specification of functional requirements,”文档中描述要对数据进行的操作,比如增删改查。进行概念设 计时,设计人员应确保数据库的方案Schema能满足用户的功能需求

2014年11月4日星期二

1.       从抽象数据模型到实现具体的数据库涉及两阶段的设计。在逻辑设计阶段设计人员将高层次的概念模型 映射为将要实现的数据库系统所采用的数据模型,在接下来的物 理设计阶段设计人员以上一阶段的数据模型为基础开展工作,进行物理设计时要考虑数据库系统的文件组织以及内部存储结构等内容,这部分内容见第十章。

1.6.3 Entity-Relationship 模型

2.       ER模型一组基本对象——实体以及这组实体之间的关系组成。实体一现实世界中能与其他对象区分开来的物体或者东西。比如一个人,一个银行账户都可视为一个实体。

3.       在数据库中我们用一组属性Attribute来描述一个实体。比如我们可以用dept_name,building , budget来描述大学里的某个学院,它们的值的集合构成了学院实体的集合。 类似的,我们可以用ID、Name、Salary三个属性来描述一位老师(实体)。老师的ID字段没什么实际的意义,它用于区分两位老师,因为两位老师可能名字、薪水都相 同。

4.       关系Relationship是多个实体间的某种联系。比如“成员”这个关系描述了一位老师与一个学院之间的关联。同一类型的多个实体组成一个实体集合,同一类型的多个关系组 成一个关系集合。

5.       一个数据库的逻辑结构(方案)可以用ER图来描述。平常我们较多使用UML Unified Modeling Language 来画ER图。

1.6.4 Normalization

2014年11月6日

8.       关系数据库设计中常用的另一种方法是规范化Normalization,其目的是设计与没有冗余但获取信息又很方便的数据库方案。这种方法的要旨是按照某种范式Normal  Formal 来设计数据库。为了判断某个关系的方案能否满足某种范式,我们需要了解正在对其建模的现实世界的一些额外信息,8.4节会介绍使用函数依赖来判断关系的方案 是否满足范式的方法。

9.       不使用范式的数据库设计有很多问题,其中突出的问题有:

a)       信息重复存储。如果把学院和老师存在同一个表中,则一个学院的两个老师对应两行,这两行中都存储了同样的学院的信息。重复存储的信息一方面浪费空间,另一 方面,更新时,所有重复的位置都要更新到,比如更新学院的预算时,前面的表中该院的老师对应的行都要更新到,不然一个学院就会有两个预算。

b)       无法表示某些信息。仍然假设把学院和老师放在同一个表里。那么就无法创建只有学院还没有老师的新学院。这种情况下,可以使用null值。null表示值不存在,或者 未知。未知的值可能是丢失了(有值,但是我们不知道)也可能是不知道——不知道有没有值。 null值处理起来比较麻烦,一般不要用它

1.7 数据存储与查询

2014年11月10日星期一

1.       数据库系统可分成存储管理器storage manager和查询处理器query processor两大部分。

2.       数据库系统管理的数据量一般都非常大,由于内存中放不下这么多数据,这些数据就存放在硬盘中,由于从硬盘读写数据比较慢,因此数据库系统应当以一种能尽量减少 数据在磁盘和内存之间移动的方式来组织要存储的数据。

3.       查询处理器的作用在于帮助用户以方便、简单的方式来访问数据,使用户能在视图一级开展工作,在保证性能的同时又能从底层的物理细节中摆脱出来。将用户编写的逻 辑层的、非过程式的查询、更新语句翻译成高效的物理层的操作是DBMS的工作。

1.7.1存储管理器

4.       存储管理器storage manager是数据库系统中底层的数据和 应用程序以及提交到系统的查询语句 之间的接口。

5.       存储管理器负责与文件管理器交互。原始的数据是通过操作系统的文件系统存储在磁盘上的,存储管理器负责将DML语句翻译成底层的文件系统级的命令,因此存储管理 器应当负责存储、获取、更新数据库中的数据。

6.       存储管理器一般包括以下几个部分:

a)       授权和完整性管理器Authorization and integrity manager。检查数据是否满足相应的完整性约束,以及访问数据的用户是否有相应的权限

b)       事务管理器。用于确保即使系统崩溃整个系统也处于一致(正确)的状态,并且确保当前事务的执行过程不会与别的事务冲突。

c)       文件管理器,管理磁盘空间的分配以及存储在磁盘中的信息的数据结构。

d)       缓存管理器,负责从硬盘中读取数据到内存中,以及将哪些数据缓存在内存中。缓存管理器能协助数据库管理比内存大得多的数据,是数据库系统的重要组成部分。

7.       作为数据库的物理实现的一部分,存储管理器中采用了几种数据结构:

a)       数据文件,存储数据库本身

b)       数据字典,存储数据库的结构的元数据,尤其是数据库方案Schema的元数据

c)       索引,可用于提高数据访问速度

1.7.2 查询处理器

8.       查询处理器由以下几部分组成:

a)       DDL 翻译器,翻译DDL语句,并将DDL中的定义记入数据字典

b)       DML 编译器,将以查询语言表示的DML语句翻译成查询执行引擎可以理解的较低层次的执行计划。一个查询语句可以被翻译成多个返回结果相同的执行计划,DML 翻译器通过进行查询优化来选择开销最低的计划

c)       查询执行引擎,执行DML编译器翻译出来的底层的命令。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值