数据库系统
为什么要用数据库?
!(链表去重)[images/2025-5-1.png]
以前操作链表的时候,数据是按序给出的,编程人员可以自行在程序中为数据分配地址。
但是看这道题,数据没有按地址顺序给出,需要对读入的数据按地址进行重组,只是进行一个简单的去重操作,就已经麻烦很多了。
可以发现,问题的根源在于,我们是使用链表,通过物理地址连接的方式将数据关联并存储。
于是,即使不考虑并发,不考虑存储容量瓶颈,不考虑内存管理的复杂性和可维护性。每次数据的布局发生变化的时候,都要重写程序。
于是数据库出现了——1969年数学家Codd发表关系模型
数据之间将通过逻辑建立连接,而不是通过指针、偏移量、磁盘上的内容等这样的物理连接
A Relational Model of Data for Large Shared Data Banks
Week1:数据库简介(Chap 1)、关系模型(Chap 4)
第一章主要回答了我们为什么要用数据库系统这个问题。内容包括相关基础概念和历史。同时也交代了本书的目的:“帮助大家完成范型改变。”,具体地说就是用一种全局的思路去进行“数据库的设计与实现”。
数据库管理系统(DBMS)的发展经历了三代:
第一代 DBMS(层次模型和网络模型):
- 层次模型:数据以树形结构组织,每个记录类型只有一个父记录类型。
- 网络模型:数据以图形结构组织,一个记录类型可以有多个父记录类型。
- 优点:结构清晰,易于理解和实现。
- 缺点:不够灵活,难以处理复杂的数据关系。
第二代 DBMS(关系模型):
- 关系模型:数据以表格形式组织,每个表格由行和列组成,行表示记录,列表示字段。
- 优点:结构简单,易于理解和使用;支持复杂的查询和事务处理。
- 缺点:在处理大量数据时性能可能不如其他模型。
第三代 DBMS(面向对象模型、对象关系模型等):
- 面向对象模型:支持对象和类的概念,可以表示复杂的数据结构。
- 对象关系模型:结合了关系模型和面向对象模型的优点,支持对象和类的概念,同时保持了关系模型的简单性和易用性。
- 优点:支持复杂的数据结构和操作,具有良好的可扩展性和灵活性。
- 缺点:实现复杂,需要较高的技术支持。
关系模型
关系模型定义了一种基于关系的数据库抽象,以避免维护开销。
关键原则:
- 将数据库存储在简单的数据结构(关系)中。
- 物理存储留给数据库管理系统(DBMS)实现。
- 通过高级语言访问数据,DBMS 确定最佳执行策略。
▶tips
基本概念:数据库——一组数据,数据库管理系统——管理和控制数据的软件,数据库应用——上层程序
也就是说,我们这门课研究的范围不仅包括底层的模型,管理系统,还包括上层的应用程序,与数据库交互的代码。要完全理解DBMS的优缺点,需要从DBMS的发展历史入手。数据库的产生是应生产需求而自然形成的。去更好地理解我们为什么要使用数据库,可以从文件系统开始。这是一个我们每天都在用的东西,我们作为单个用户(只考虑自己对文件的取用),在电脑上创建不同的文件夹归档文件,比如说我将名为“编程”的文件夹中,放入了各种编程涉及到的文档,代码。这对我们目前的需求来说是方便且合理的。为了更快拿到这个数据,我在文件夹下编写小程序,帮我快速读取文件拿到数据。这看起来非常高效了。
但当我们站在一个大公司管理者的角度重新审视这种数据管理方式,就不太高效率了。数据库通过集中管理与分离帮我们解决。
这种考虑方式的转变——范型转换,即本书的目的。从设计思想上,这又是一次面向过程到面向对象的转变,采用更高效的方式解决问题的一种计算机科学思想。以前我们遇到的面向过程编程到面向对象编程,
从原根,阶,同余的讨论到群,环,域的讨论,这都属于我们以前见过的例子。
结合关系数据模型,解释下列概念:
(a) 关系:在关系数据模型中,关系是指一组元组的集合,每个元组包含相同数量的属性。关系可以被视为一个二维表,其中行代表元组,列代表属性。
(b) 属性:属性是关系中的一个列,它代表数据的一个特征或字段。每个属性都有一个名称和一个数据类型,用于描述元组中的特定信息。
(c) 域:域是指属性可能取值的集合。例如,如果一个属性是“年龄”,则其域可能是所有非负整数。
(d) 元组:元组是关系中的一行,它代表一个实体或记录。每个元组包含一组属性值,这些值对应于关系中的列。
(e) 内涵和外延:
- 内涵:指的是概念的本质属性,即定义一个概念所必须具备的特征。
- 外延:指的是概念所包含的具体实例或对象的集合。
(f) 维和基数:
- 维:在关系数据库中,维通常指的是一个表中的列数,即属性的数量。
- 基数:基数指的是一个表中的行数,即元组的数量。
说明数学中的关系与关系数据模型中的关系之间的联系。
在数学中,关系通常指的是两个集合之间的联系,这种联系可以是一对一、一对多或多对多的。在关系数据模型中,关系被用来表示数据实体之间的联系,这些联系可以通过外键来实现。数学中的关系理论为关系数据库的设计和实现提供了理论基础,特别是在处理多对多关系和规范化方面。关系数据模型中的操作,如选择、投影和连接,都是基于数学中的关系代数理论发展而来的。
第三代数据库管理系统就是关系型数据库吗?
第三代数据库管理系统(DBMS)通常指的是面向对象的数据库管理系统(OODBMS)。面向对象数据库尝试将面向对象编程的概念,如继承、封装和多态性,融入到数据库管理系统中。这种数据库管理系统试图更自然地映射现实世界中的对象和它们之间的关系。
非关系型数据库(NoSQL),又称为非结构化数据库,是与关系型数据库相对的一个概念。非关系型数据库包括多种类型,如键值存储、文档存储、列族存储和图数据库等,它们通常用于处理大规模数据集,提供高可用性和灵活性。
虽然面向对象数据库和非关系型数据库都属于第三代数据库管理系统的范畴,但它们并不是同一个概念。面向对象数据库侧重于将面向对象的概念应用于数据库,而非关系型数据库则侧重于提供不同于传统关系型数据库的存储和查询方式,以适应不同的应用场景和数据模型需求。
总的来说,第三代数据库管理系统包括面向对象数据库和非关系型数据库等多种类型,它们各自有着不同的目标和特点。
超关键字是一个属性或者属性集合,它能够唯一地标识出关系中的每个元组,候选关键字是最小的超关键字。主关键字是选出作为各元组标识的某个候选关键字。一个关系通常都必须有一个主关键字。外部关键字是一个关系中与另一个关系的候选关键字匹配的属性或属性集合。
空代表对一个元组当前取值还不知道或是不可用的属性值。
实体完整性是一种约束,它规定在基本关系中,构成主关键字的属性的值不能为空。引用完整性规定,一个外部关键字的值或者与主关系的某个元组的候选关键字的值相同,或者为空。除了关系完整性,完整性约束还包括要求必须有值、域和多样性约束,其他完整性约束称为一般性约束。
关系的性质:
- 同一关系模式中各关系模式不能重名(表名不重合)
- 每一个单元格必须确切包含一个原子值(不能空)。
- 不存在重复元组(数据不雷同)。
- 每个属性都有不同的名字(列名不重合)
- 同一属性中的各个值都取自相同的域(对于表中的某一列,该列中的所有数据值都必须属于相同的数据类型,并且遵循相同的约束条件。)
- 属性的顺序不重要
注意:以上是关系的性质,但实际的数据库管理软件不一定严格遵守关系模型。
关系是一个无序集合(unordered set),其中包含代表实体的属性之间的关系。
Week2:ER建模
结构化约束的处理方法:
一对一(1:1)联系
多对多(:)联系
多重性的确定与表示……
关注ER模型建立时可能产生的问题:连接陷阱
两类主要的叫做:扇形陷阱和断层陷阱
Summary:
前边学到,关系模型是一种有效的信息组织方式,并且有着可靠的理论基础。
现在,我们已经确定,我们要以这样的信息组织方式来设计数据库。那么更具体地,如何得到具体的模型?
秉持“会用才是硬道理”的理念,课程进度跳到了Chap12-ER建模,
为了得到这个具体的模型,我们学习ER建模,这是一种建模技术,另一种是规范化的技术在Chap14,15,我们课程将其略过。
得到了具体模型后,为了将其直接设计实施,课程进入Chap16-19:概念数据库设计,逻辑数据库设计,物理数据库设计。
这里书上的说法叫“方法学”——规定了设计过程每一步需要做的事。我们的课程将这个过程融入DreamHouse的实例讲解中,进行实操演示。
Week3: EER建模-概念数据库模型设计
这节课讲解了具体建出来的ER模型,重点是EER建模中子类,超类,泛化……这种概念与处理方法。
Week4: 逻辑数据库模型设计=>物理数据库模型设计
这节课主要讲解了从CDM到LDM发生的变化和需要手动修改的点,以及其原因。
Week5:
Week6:
Week7:
Week8:
Week10:
经历了不知道几周的学习,PowerDesigner的学习进度终于连上了数据库。这周又开始考试了。
开始磨枪了。
第13章:ER=>EER
将超类和子类的概念引入ER模型主要有两个原因。
- 为了避免对相似的概念进行重复的描述
- 为数据库系统设计添加了更多的语义信息
特殊化
通过表示实体成员间的差异特征而将这些成员间的差异最大化的过程。
泛化
通过标识实体成员间的共同特征而将这些成员间的差异最小化的过程。
对于规范化/特殊化来说,有参与约束和不相交约束。
第14章:第一范式(1 NF)
非范式(UNF):包含一个或多个重复组的表
第一范式(1NF):属于第一范式的关系,其每一行和每一列相交的位置有且仅有一个值。
第二范式(2 NF)
完全函数依赖:决定方案应该具有最少的属性,这些属性是保证右边的属性函数依赖于它所必不可少的。
2NF基于完全函数依赖概念,适用于具有合成关键字的关系,即主关键字由两个或两个以上的属性构成。
主关键字仅包含一个属性的关系已经至少是2NF的。
满足第一范式的要求并且要求每个非主关键字属性都完全函数依赖于主关键字的关系。
第三范式(3 NF)
满足第一范式和第二范式的要求并且所有非主关键字属性都不传递依赖于主关键字的关系。
第15章:进一步规范化
BCNF,4NF,5NF
当且仅当每一个函数依赖的决定放都是候选关键字时,某一关系才是BCNF的。