数据库 - 数据库系统原理

文章目录

一,数据库与数据库管理系统定义

数据库(DB)

  • 与企业相关的数据集合
  • 具有完整性持久性的数据集合
  • 长期存在的信息集合
  • 长期存储在计算机内,有组织的可共享的数据集合

数据库管理系统(DBMS)

  • 数据库 + 一组用于访问、更新和管理这些数据的程序

DBMS的主要特性

  • 数据访问的高效可扩展性
  • 缩短应用开发时间
  • 数据独立性(物理数据独立性 / 逻辑数据独立性)
  • 数据完整性安全性
  • 并发访问鲁棒性(恢复)

二,数据视图(View of Data)

1,数据抽象(Levels of Abstraction)

如何使用数据库系统:不同的用法需要不同层次的抽象(如,学生成
绩管理系统)

数据抽象的三层结构:
在这里插入图片描述

  • 物理层(physical level):描述数据实际上是怎样存储的
  • 逻辑层(logical leve):描述数据库中存储什么数据及这些数据间存在什么关系
    例如 ↓
type instructor = record
	ID : char(5); 
	name : char(20);
	dept_name : char(20);
	salary : numeric(8,2);
end;
  • 视图层(view level):应用程序能够隐藏数据类型的详细信息。视图也可以出于安全目的隐藏数据信息(例如,员工的薪水)

2,实例和模型(Instances and Schemas)

类似编程语言中的类型(types)和变量(variables)

  • 类型↔模式,变量↔实例

模式(Schema):数据库的总体设计

  • 类似于程序中变量的类型信息
  • 物理模式:在物理层描述数据库的设计
  • 逻辑模式:在逻辑层描述数据库的设计

实例(Instance):特定时刻存储在数据库中的信息的集合

  • 类似于程序中变量的值

3,数据库系统的模式结构

在这里插入图片描述

4,物理独立性和逻辑独立性

修改一层的结构定义不影响更高层的结构定义

物理数据独立性(Physical Data Independence)

修改物理结构而不需要改变逻辑结构的能力

  • 应用程序依赖于逻辑结构
  • 应用程序独立于数据的结构和存储
  • 这是使用DBMS最重要的好处

逻辑数据独立性

数据逻辑结构的改变不影响应用程序

  • 逻辑数据独立性一般难以实现,因为应用程序严重依赖于数据的逻辑结

三,数据模型

数据模型是一个概念工具的集合,用于描述:

  • 数据结构
  • 数据关系
  • 数据语义
  • 数据约束

数据抽象的不同层次需要不同的数据模型来描述:

  • 实体 - 关系模型
  • 关系模型
  • 其他模型

1,实体 – 联系模型

E-R(Entity – Relationship)模型

实体(对象)

  • 例如,客户、帐户、银行分支机构
  • 实体由属性描述

联系:是几个实体之间的关联

  • 例如,帐号 A-101 是由客户 Johnson 拥有,联系设定存款关联客户的帐户

E-R模型数据库设计中使用广泛

  • ER模型通常将数据库设计转化为关系模型的设计
  • 最早由Peter Chen提出
    在这里插入图片描述
    实体-联系模型示例
    在这里插入图片描述

2,关系模型(仅引入概念)

将E-R图转换为关系模式
在这里插入图片描述
来举个“栗子” ↓
在这里插入图片描述

四,数据库语言

数据库语言:

  • Data Definition Language(DDL,数据定义语言)
  • Data Manipulation Language(DML,数据操纵语言)
  • Data Control Language(DCL,数据控制语言)

1,数据定义语言 - DDL

传送门:细品 SQL语言

  • 指定一个数据库模式作为一组关系模式的定义
  • 指定存储结构访问方法一致性约束
  • DDL语句经过编译,得到一组存储在一个特殊文件中的表,特殊文件即数据字典(data dictionary),其中包含元数据(metadata)

定义资料库架构的表示方法

create table instructor ( 
	ID char(5), 
	name varchar(20), 
	dept_name varchar(20), 
	salary numeric(8,2))

数据字典(data dictionary)包含元数据(metadata),包括:

  • 数据库模式(Database schema)
  • 数据存储结构
  • 访问方法和完整性约束(Integrity constraints)
  • 统计信息
  • 授权(Authorization)

2,数据操纵语言 - DML

  • 从数据库中检索数据
  • 插入/删除/更新数据
  • DML也称为查询语言
  • 两类基本的数据操作语言:
    过程化DML(Procedural DML):要求用户指定需要什么数据,以及如何获得这些数据(C,Pascal,Java,…)
    声明式DML(Declarative DML):也称为非过程化DML,只要求用户指定需要什么数据,而不指明如何获得这些数据(SQL,Prolog)

3,SQL语言 - 介绍

SQL = DDL + DML + DCL

SQL是使用最广泛的查询语言。有三种用法:

  • 直接在交互环境中使用:
    SQL Server:查询分析器
    Oracle:SQL*Plus、Work Sheet
    MySQL:命令行客户端
  • 在宿主语言中,通过ODBC(开放式数据库连接)、JDBC使用
  • 在宿主语言中使用嵌入式SQL
    在这里插入图片描述

4,数据库用户(Database Users)

  • 无经验的用户(Naive users):他们通过激活事先已经写好的应用程序同系统进行交互
    (普通用户)
    – 例如,人们通过网络、银行出纳员、文员访问数据库
  • 应用程序员(Application programmers):通过SQL调用与系统进行交互
  • 富有经验的用户(Sophisticated users):用数据库查询语言或数据分析软件等工具来表达他们
    的要求。例如,联机分析处理(OLAP)、数据挖掘。
  • 特殊用户(Specialized users):编写专门的,不适合于传统数据处理框架的数据库应用。例
    如计算机辅助设计系统(CAD)、知识库系统(KDB),专家系统(ES)。

5,数据库管理员(Database Administrator)

数据库管理员(DBA):对数据库系统进行集中控制的特殊用户

  • DBA拥有管理数据库的最高权限
  • DBA协调数据库系统的所有活动
  • DBA控制所有用户访问数据库的权限
  • DBA对企业的信息资源和需求有很好的理解

数据库管理员的工作包括:

  • 模式定义
  • 存储结构与存取方法定义
  • 模式及物理组织的修改
  • 数据访问授权
  • 日常维护:监视数据库的运行,确保数据库的性能数据库安全(如,定期备份数据库,数据库恢复)

五,数据库引擎(Database Engine)

1,存储管理器(The storage manager)

  • 在底层数据存储与应用程序及查询之间,提供接口
  • 对数据库中的数据进行高效存储,检索与更新
  • 包括:
    – 事务管理(Transaction manager)
    – 授权和完整性管理(Authorization and integrity manager)
    – 文件管理 (File manager 管理文件系统与数据文件,数据字典,索引文件之间的交互)
    – 缓存管理(Buffer manager)

2,查询处理器(Query Processor)

  • 接收数据库语言输入,经过解析、优化、执行,输出相应结果给用户
  • 包括:
    – 解析和翻译(Parsing and translation)
    – 优化(Optimization)
    – 执行(Evaluation)
    在这里插入图片描述

3,事务管理(Transaction Management)

  • 并发的使用很重要,但也会带来一些问题
  • 事务(Transaction):是在数据库应用中完成单一逻辑功能的操作集合
  • 事务的要求: Atomicity (原子性), Consistence (一致性), Isolation (隔离性), Durability (持久性) / ACID
  • 事务管理组件(Transaction-management component):确保系统在出现故障(例如断电或操作系统宕机),或事务失败的情况下,数据库都能保持一致性(正确性)
  • 并发控制管理器(Concurrency-control manager):控制并发事务之间的交互

六,数据库体系结构(Database Architecture)

  • Centralized databases集中数据库
    • 一到几个核心,共享内存
  • Client-server,客户机-服务器
    • 一台服务器机器代表多台客户机执行工作。
  • Parallel databases并行数据库
    • Many core shared memory多核共享内存
    • Shared disk共享磁盘
    • Shared nothing无共享内容
  • Distributed databases分布式数据库
    • Geographical distribution地理分布
    • Schema/data heterogeneity架构/数据异构性

在这里插入图片描述
SQL Server 体系结构
在这里插入图片描述

七,应用程序体系结构(Database Applications)

在这里插入图片描述

两层体系结构(Two-tier architecture)

  • 像ODBC和JDBC这样的应用程序接口标准被用于进行客户端和服务器的交互
  • 該應用程序駐留在客戶端電腦上,在客戶端電腦上調用在伺服器上資料庫系統功能

三层体系结构(Three-tier architecture)

  • 如基于web的应用程序及采用“中间件”构建的应用
    程序
  • 客戶端電腦充當前端,並且不包含任 何直接的資料庫調用。
    • 客戶端通常通過forms interface與application server通信。
    • application server又與資料庫系統通信以存取資料。

八,关系和关系模式

1,属性与元组(Attributes and Tuple)

属性类型

  • 关系的每个属性都有一个名称
  • 域(domain):每个属性的取值集合称为属性的域
  • 属性值必须是原子的,即不可分割(1NF,第一范式)
    — 多值属性值不是原子的
    — 复合属性值不是原子的
  • 特殊值null是每一个域的成员
  • 空值给数据库访问和更新带来很多困难,因此应尽量避免使用空值
  • 我们先假设不存在空值,在后面的章节中,再讲解空值对不同操作的影响

元组的无序性(tuples)

  • 元组的顺序性是无关紧要的(元组能够以任意顺序存储)
  • 但一个关系中不能有重复的元组

2,关系基本结构(Structure of Relational Databases)

  • 一般地,给出集合D1,D2,…,Dn ,(Di=aij | j=1…k)
    — 关系(relation)R 是:D1 x D2 x … x Dn 的子集,即一系列Di域的笛卡尔积
  • 因而关系是一组n元组(a 1j,a 2j,…,a nj)的集合,其中每个a ij∈D i
  • 例如:
    在这里插入图片描述

3,笛卡尔积示例

在这里插入图片描述

4,关系的概念

关系涉及两个概念:关系模式关系实例

  • 关系模式描述关系的结构:
    — 例:
    Instructor-schema =(ID:string,name:string,dept_name: string, salary: int)
    或 Instructor-schema=(ID,name,dept_name,salary)
  • 关系实例表示一个关系的特定实例,也就是所包含的一组特定的行
  • 关系、关系模式、关系实例区别:
    — 变量↔关系
    — 变量类型↔关系模式
    — 变量值↔关系实例

关系模式(Relation Schema)

关系实例(Relation Instance)

  • 关系的当前值(关系实例)由表指定
  • 一个元组t代表表中的一行
  • 如果元组变量t代表一个元组,那么t[name]表示属性name的t的值
  • 例,
    关系:instructor (ID, name, dept_name, salary)
    实例:在这里插入图片描述

九,键(Keys)

  • 使K ⊆ R
  • 如果K值能够在一个关系中唯一地标志一个元组,则K是R的超码 (superkey)
    例,{instructor-ID, instructor-name}和{instructor-ID}都是instructor的超键
  • 如果K是最小超码,则K是候选码(candidate key)
    例,{instructor-ID}是instructor的候选码。因为它是一个超码,并且它的任意真子集都不能成为一个超码
  • 如果k是一个候选码,并由用户明确定义,则K是一个主键(primary key)。主键通常用下划线标记
  • 假设存在关系r和s:r(A , B, C), s(B , D),则在关系r上的属性B称作参
    照s的
    外码
    (Foreign key),r也称为外码依赖的参照关系(Referencing relation),s叫做外码被参照关系(Referenced relation)
    在这里插入图片描述
    大学数据库模式
    在这里插入图片描述
    模式↑ —— ↓模式图
    在这里插入图片描述

十,关系查询语言(Relational Query Languages)

查询语言:用户用来从数据库中请求获取信息的语言

  • ”查询语言(“Pure” languages):
    – 关系代数 - SQL的基础
    – 元组关系演算
    – 域关系演算
  • “纯”查询语言奠定了人们使用查询语言的基础,如SQL

在某种程度上是过程化语言(procedural language)

六个基本运算

  • Select 选择
  • Project 投影
  • Union 并
  • set difference 差(集合差)
  • Cartesian product 笛卡儿积
  • Rename 更名(重命名)

用户输入一个或两个关系,并得到新的关系

1,选择运算(Select)

在这里插入图片描述
在这里插入图片描述

2,投影运算(Project)

在这里插入图片描述在这里插入图片描述

3,并运算(Union)

在这里插入图片描述在这里插入图片描述

4,差运算(Set difference)

在这里插入图片描述在这里插入图片描述

5,广义笛卡尔积(Cartesian product)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

6,更名运算(Rename)

在这里插入图片描述

7,复合运算

在这里插入图片描述

附加运算

  • Set intersection 交
  • Natural join 自然连接
  • Division 除
  • Assignment 赋值

1,交运算(Set intersection)

在这里插入图片描述在这里插入图片描述

2-1,自然连接(Natural join)

在这里插入图片描述在这里插入图片描述

2-2,theta连接

在这里插入图片描述

3,除运算(Division)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

4,赋值运算(Assignment)

在这里插入图片描述

扩展关系代数运算

  • 广义投影
  • 聚集函数
  • 外连接

1,广义投影

在这里插入图片描述

2,聚集函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

3,外连接

在这里插入图片描述在这里插入图片描述在这里插入图片描述

十一,空值(null)

概念与性质

  • 元组的某些属性值是可以为空的
  • null表示未知值或值不存在
  • 涉及空的任何算术表达式的结果为空
  • 聚集函数会忽略空值
    – 可以返回空值作为结果
    – 我们遵循SQL对空值的处理语义
  • 为了消除重复和分组,空值和其他值同等对待
    – 一种方法是两个空值被认为是相同的
    – 另一种方法是假设每个空值都是不同的
    – 这两种方法都可行,但我们更愿意遵循SQL对空值的处理语义与空值的比较将返回一个特殊值:unknown
  • 如果用false代替unknown,那么not(A<5)与 A>=5 的结果就会不相等
  • 在SQL中,如果谓词P的值为unknown,那么“P is unknown”的值为真
  • 如果选择谓词的值为unknown,那么选择谓词的结果被认为false

使用特殊值unknown的三值逻辑:

OR:

  • (unknown or true) = true
  • (unknown or false = unknown
  • (unknown or unknown) = unknown

AND:

  • (true and unknown) = unknown
  • (false and unknown) = false
  • (unknown and unknown) = unknown

NOT:

  • (not unknown) = unknown

十二,数据库的修改

数据库的内容可以使用下面的操作来修改:

  • 删除
  • 插入
  • 更新

所有这些操作都使用赋值操作表示

删除

  • 删除请求的表达与查询的表达非常相似,不同的是,前者不是要将找出的元组显示给用户,而是要将它们从数据库中去除
  • 这样只能将元组整个地删除,而不能仅删除某些属性上的值
  • 使用关系代数,删除可表达为
    r ← r – E
    其中,r 是关系,E是关系代数查询

来看个例子理解一下吧~
在这里插入图片描述

插入

  • 为了将数据插入关系中:
    – 要么指明一个要插入的元组
    – 要么写出一个查询,其结果是要插入的元组集合
  • 使用关系代数,插入可表达为:
    r ← r ∩ E
    其中,r 是关系,E是关系代数表达式
  • 如果让E是一个只包含元组的常量关系,就可以表达为向关系中插入单一元组

来看个例子理解一下吧~
在这里插入图片描述

更新

  • 某些情况下,可能只希望改变元组中的某个值,而不希望改变元组中
    的所有值
  • 可以用广义投影运算来完成这个任务:
    r ← π F1, F2, …, FI,(r)
    – 其中,当第i个属性不被修改时, Fi 表示的是r的第i个属性
    – 当第i个属性将被修改时, Fi 表示的是一个只涉及常量和r的属性的表达式,表达式给出了此属性的新值

来看个例子理解一下吧~
在这里插入图片描述
(2020年3月30日21:06:12 数据库初学)

发布了17 篇原创文章 · 获赞 4 · 访问量 509

猜你喜欢

转载自blog.csdn.net/weixin_46072771/article/details/105192255