一、核心术语概念
数据 (Data)
- 定义:描述现实世界中各种具体事物或抽象概念的、可存储并具有明确意义的信息。在数据库领域,数据是管理的主要对象,需经过抽取和结构化处理。
- 要点:数据是信息的载体,是数据库存储的基本对象。
就是你想管理的信息,比如用户的姓名、年龄。它是“原材料”。
数据库 (DB, Database)
- 定义:长期存储在计算机内、有组织的、可共享的、相互关联的数据集合。
- 要点:具有较小的冗余度、较高的数据独立性和易扩展性,并为多种应用(用户)共享。
存放数据的“仓库”。这些数据是按特定结构组织的(比如一张张Excel表格)。
数据库管理系统 (DBMS, Database Management System)
- 定义:位于用户与操作系统之间的一层数据管理软件,是数据库系统的核心。它由一组计算机程序构成,用于科学地组织和存储数据、高效地获取和维护数据。
- 要点:主要功能包括数据定义、数据操纵、数据库的运行管理(并发控制、安全性、完整性检查、故障恢复)以及数据库的建立和维护。
管理仓库的“仓库管理员”和“一套管理系统”。你告诉管理员(发SQL命令)要存什么、取什么,他来操作仓库。我们常说的Oracle、MySQL就是DBMS。
数据库系统 (DBS, Database System)
- 定义:在计算机系统中引入数据库后的系统构成。它是一个完整的运行环境。
- 构成:数据库(DB) + 数据库管理系统(DBMS) + 应用程序 + 数据库管理员(DBA) + 最终用户。
一个完整的运行环境。你的Java应用 + MySQL + Linux服务器 + 运维 + 你,合在一起才叫数据库系统。
数据库应用系统
- 定义:指为实现特定业务逻辑而开发的、基于数据库的应用程序。它为最终用户提供友好的图形用户界面(GUI),通过数据库语言或数据访问接口存取数据库中的数据。
- 要点:强调“业务逻辑”的实现,对应于数据库系统总体结构中的“应用”部分。
就是你的Java/Go/PHP项目。它实现业务逻辑(比如下单流程),给用户提供界面(网页或App)。
视图 (View)
- 定义:视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图在数据库中并不以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
- 要点:本质是存储在数据字典中的SELECT语句。它可以看作是从一个或多个表中导出的表,是数据库的外模式。
用户看到的数据。比如,HR专员只能看到员工姓名和部门,看不到工资。
数据字典 (DD, Data Dictionary)
- 定义:DBMS中的一个特殊的文件或数据库,用于存储数据库自身的说明信息,即关于数据的数据,称为元数据(Meta Data)。
- 内容:包括数据库中所有对象的定义信息(如表、视图、索引)、完整性约束、用户权限、物理存储信息等。
- 要点:数据字典是DBMS工作的基础,对用户只读,由DBMS自动维护。
DBMS自己用的“小本本”,记录了数据库里有哪些表、表里有什么字段、字段是什么类型、存在哪个文件里。你用SHOW TABLES查到的信息,就来自数据字典。
二、核心原理与特性
DBMS的基本功能
- 数据独立性:指应用程序不依赖于数据的逻辑表示与物理存储。分为逻辑独立性和物理独立性。
- 安全性:通过访问控制等技术,保证数据不被非法访问和破坏。
- 完整性:通过完整性约束机制,保证数据的正确性、有效性和相容性。
- 并发控制:以多用户并发方式共享数据,并保证在这种环境下数据的一致性。
- 故障恢复:系统发生故障时,有能力将数据库恢复到某个一致的状态。
数据库系统的三级模式结构
- 外模式 (External Schema / 子模式 / 用户模式):是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。通常是概念模式的逻辑子集。
用户看到的数据。比如,HR专员只能看到员工姓名和部门,看不到工资。
- 概念模式 (Conceptual Schema / 模式):是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。它描述的是数据的逻辑结构,而不涉及物理存储细节。
全局的数据结构。是整个系统的表设计,描述了有哪些表和关系。
- 内模式 (Internal Schema / 存储模式):是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。
数据在硬盘上怎么存的?是索引文件还是堆表?
- 映射:DBMS在三级模式之间提供了两层映射(外模式/概念模式映射、概念模式/内模式映射),这两层映射保证了数据库系统中的数据独立性。
数据独立性
- 逻辑独立性:当概念模式(如增加新的实体、添加新的字段)改变时,由DBA对外模式/概念模式映射做相应改变,可以使外模式保持不变。从而建立在对应外模式上的应用程序也无需修改。
概念模式变了(比如加了字段),外模式(用户的视图)可以不变,用户程序就不用改。
- 物理独立性:当内模式(如存储结构、存取方式)改变时,由DBA对概念模式/内模式映射做相应改变,可以使概念模式保持不变。从而整个应用程序也无需修改。
内模式变了(比如换了硬盘,改了存储格式),概念模式可以不变,应用程序就不用改。
- 要点:物理独立性是物理设备升级或优化时不改程序的基础;逻辑独立性是数据库结构调整时不改程序的基础。
这就是为什么DBA可以给表加索引(改变物理存储)来提速,而你写的SELECT语句一个字都不用改。
三、数据抽象、模型与模式
数据抽象
- 定义:是一种数据抽取的过程。通过不断的数据抽象,达到将现实系统中的数据存放到DBMS中的目的,也就是实现计算机化的数据管理。
- 级别:包括视图级抽象、概念级抽象和物理级抽象。
一个过程。把现实世界的东西(如一辆汽车)简化成计算机能理解的信息。
数据模型 (Data Model)
一个工具。用什么方法来组织这些信息?是画E-R图,还是直接建表?
- 定义:数据模型是数据库中用来对现实世界进行抽象、表示和处理的工具。它是对现实世界数据特征的抽象。
- 三要素:
- 数据结构:描述系统的静态特性,即组成数据库的对象以及对象之间的联系。它是数据模型的基础。
数据长什么样?(比如关系模型里就是“表”)。
- 数据操作:描述系统的动态特性,即对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。
能对数据做什么?(就是增删改查)。
- 数据约束:描述数据结构中数据间的语法和语义联系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
数据必须遵守什么规矩?(比如主键不能空,值不能重复)。
- 数据结构:描述系统的静态特性,即组成数据库的对象以及对象之间的联系。它是数据模型的基础。
- 分类:
- 概念数据模型:面向用户、面向现实世界,与具体的DBMS无关,用于信息世界的建模。如E-R模型。
跟产品经理、业务方聊需求,用E-R图(实体关系图)这种“人话”画出来,让不懂技术的老板也能看懂,确认需求没错。
- 逻辑数据模型:用户从数据库所看到的模型,是具体的DBMS支持的数据模型。如关系模型、层次模型、网状模型。
把E-R图转换成MySQL能懂的“表”(关系模型)。
- 物理数据模型:描述数据在存储介质上的组织结构,与具体的DBMS和操作系统有关。
考虑性能,决定哪些字段建索引,用什么存储引擎(InnoDB还是MyISAM)。
- 概念数据模型:面向用户、面向现实世界,与具体的DBMS无关,用于信息世界的建模。如E-R模型。
数据模式 (Data Schema)
- 定义:是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及型的描述,不涉及具体的值。模式是相对稳定的,而实例是相对变动的。模式是数据抽象的结果。
- 关系:数据模型是数据抽象的工具,数据模式是数据抽象的结果。
一个结果。最终得到的数据库结构,比如一张具体的表 Student(id, name)。
你要开发一个“学生管理系统”。首先,你得想清楚学生有哪些属性(抽象);然后,你可能会用E-R图(模型)来画学生和班级的关系;最后,你在数据库里敲下 CREATE TABLE 语句(模式),这就定下来了。
四、数据库语言与接口
数据库语言
- 定义:DBMS提供给用户定义结构、操纵数据和管理DBMS的一个界面。
- 组成:
- 数据定义语言 (DDL):用于定义数据库的三级模式结构和约束。如
CREATE、ALTER、DROP。 - 数据操纵语言 (DML):用于对数据库中的数据进行查询和更新(增、删、改)。如
SELECT、INSERT、UPDATE、DELETE。 - 数据控制语言 (DCL):用于定义数据库用户的访问权限和安全级别。如
GRANT、REVOKE。
- 数据定义语言 (DDL):用于定义数据库的三级模式结构和约束。如
SQL
- 定义:结构化查询语言(Structured Query Language),是关系数据库的标准语言。
- 使用方式:
- 交互式SQL:在终端或客户端工具中直接输入SQL命令执行。
- 嵌入式SQL:将SQL语句嵌入到高级程序设计语言(如C、Java)中。
ODBC/JDBC/OLE DB/ADO
- 定义:都是数据库访问中间件,为应用程序提供统一、标准的数据库访问接口,以屏蔽不同数据库产品之间的差异,实现平台无关性和可移植性。
- ODBC (开放数据库连接):微软提出的基于C语言的数据库访问API规范。
- JDBC (Java数据库连接):Sun公司提出的基于Java语言的数据库访问API规范。
- OLE DB:微软提出的基于COM的、系统级的、能访问关系和非关系数据源的编程接口。
- ADO (ActiveX数据对象):基于OLE DB的、应用级的、易于使用的自动化接口。
五、用户与开发技术
数据库系统的用户
- 最终用户:通过应用程序与数据库进行交互的业务人员。分为事务型用户和分析型用户。
- 数据库应用开发人员:负责需求分析、系统设计、应用程序开发和数据库建立维护的人员。包括系统分析员和程序员。
- 数据库管理员 (DBA):负责全面管理和维护数据库系统的专业人员。职责包括参与设计、定义数据模式、授权、监控性能、备份恢复等。
C/S模式 (客户/服务器模式)
- 定义:将应用一分为二,前端客户机负责GUI和部分业务逻辑,后端服务器负责数据管理和共享的计算模式。
- 两层结构:客户端(表示逻辑+业务逻辑)+ 数据库服务器。
- 三层结构:客户端(表示逻辑)+ 应用服务器(业务逻辑)+ 数据库服务器。
B/S模式 (浏览器/服务器模式)
- 定义:是Web兴起后的一种网络结构模式,客户端统一采用浏览器,通过Web服务器与应用服务器及数据库服务器交互。
- 多层结构:浏览器 + Web服务器 + 应用服务器 + 数据库服务器。
- 优点:客户端零安装、零维护,易于系统升级和扩展。
OLTP vs. OLAP
- OLTP (联机事务处理):主要面向日常业务处理,如银行交易、订单录入。特点:高并发、短事务、频繁更新、实时性要求高。
- OLAP (联机分析处理):主要面向数据分析决策,如报表、数据挖掘。特点:查询复杂、数据量大、相对不频繁更新、响应时间要求相对宽松。
六、传统数据模型
层次数据模型
- 数据结构:用树形结构表示实体及实体间的联系。有且仅有一个根结点,其他结点有且仅有一个双亲结点。
- 数据操纵:导航式语言,查询需从根结点开始沿路径进行。
- 典型代表:IBM的IMS。
网状数据模型
- 数据结构:用有向图结构表示实体及实体间的联系。允许结点有多个双亲,允许结点间有多个联系,可直接表示多对多联系。
- 数据操纵:导航式语言,比层次模型更灵活,但结构复杂。
- 典型代表:DBTG系统(CODASYL系统)。
关系数据模型
- 数据结构:用二维表表示实体及实体间的联系。
- 数据操纵:非导航式的、集合操作,通过关系代数(如并、交、投影、选择、连接)进行操作。
- 理论基础:严格的数学基础(关系代数、关系演算)。
- 典型代表:Oracle、DB2、SQL Server、MySQL等。