mysql数据库(1) - 数据库的相关知识
数据库的基本概念
基础概念
数据处理(Data Processing):对数据进行加工整理的过程,即将数据转换成信息的过程。
数据(Data):描述事物的符号记录,客观世界活动的描述(例如:数字、文字、图片)。
数据处理(Data Processing):对数据进行加工整理的过程,即将数据转换成信息的过程。
信息:信息是数据经过加工后的产物。
数据库的特点:
- 结构化方式存储,便于查询和分析(结构化存储);
- 支持多用户同时访问和使用(共享性);
- 数据修改不会(也不需要)影响和修改程序逻辑(独立性);
- 保护数据安全(安全性);
数据库管理系统DBMS:用于创建、管理、操作和维护数据库的大型软件系统(比如常见的mysql,mssql等)。
数据库系统:数据库系统是由:1. 数据库(DB);2. 数据库管理系统(DBMS);3. 应用程序;4. 数据库管理员 共同组成的整体。
数据库(DB):是一个以某种组织方式存储在磁盘上的数据的集合。
数据库的用户:
- 数据库管理员:DBA;
- 数据库分析师:DBD;
- 应用程序员:PG;
- 终端用户:End User。
数据管理技术的发展

人工管理阶段
人工管理阶段主要的特征是数据存储于逻辑代码中,难以修改、维护。
- 数据与程序深度绑定:数据存储于程序代码中,数据不独立于程序(例如变量定义,地址手动分配)等;
- 缺乏共享性:单一程序访问特定数据,数据难以重复使用(多个程序难以访问同一项数据);
- 维护成本高:程序改动数据结构的定义,需要大规模重写数据结构或重写数据部分,维护效率低下。
文件系统阶段(20世纪50-60年代)
数据从逻辑代码中分离,借助操作系统或磁盘系统提供的文件系统,将数据切分为文件,按照文件系统的存储结构存储数据。在这个阶段的优势:1. 由于数据和代码分离,使得数据的存储和管理更加灵活;2. 通过分层级的目录结构,使得对多类型的存储分层管理。
- 数据冗余:相同信息存储于多个文件之中,重复存储,浪费存储空间。
- 不一致性质:多处数据难以同步更新,容易产生冲突;
- 关联性较差:文件与文件之间缺乏联系,复杂查询难以实现。
数据库系统阶段(20世纪60年代-今天)
标志着数据的管理进入结构化和高效化的阶段。
特点:
- 数据可以共享:多个应用可以同时访问同一数据,提高了数据的利用率,减少冗余且扩展性高;
- 数据独立性:数据的物理存储和逻辑结构分离,修改数据结构不会对应用程序造成影响;
- 数据完整性:通过约束条件,可以确保数据的正确和一致;
- 数据安全性:提供用户权限管理和数据加密机制,保证数据安全。
按照数据库模型和数据的组织方式,常见的数据库类型有:
- 关系型数据库:例如Mysql、sqlserver等,类似于二维表,通过主键和外键对数据进行关联;
- 非关系型(NoSQL)数据库:高灵活性质,例如键值数据库redis、文档性数据库。
- 分布式数据库:作为数据库技术和分布式技术融合产生的类型,核心是将数据存储分散到存储节点等,但不是学习的重点。
回顾
Q:简述什么是数据库?数据库有哪些主要特征?
A:数据库是将定用途数据的集合。主要特征有:1. 结构化存储;2. 共享性;3. 独立性;4. 安全性。
By AI
数据库是长期存储在计算机内、有组织的、可共享的、统一管理的相关数据的集合。
数据库系统(或说数据库)的主要特征包括:
- 数据结构化:数据按照特定模型组织,并描述数据间的联系。
- 数据的共享性高、冗余度低、易扩充:可为多个应用服务,减少重复数据,易于适应变化。
- 数据独立性高:包括物理独立性和逻辑独立性,程序与数据分离。
- 数据由数据库管理系统(DBMS)统一管理和控制,从而提供了:
- 数据的安全性保护
- 数据的完整性检查
- 并发控制
- 数据库恢复
By Teacher
数据库是与特定主题或用途相关的数据和对象的集合,简单地说,就是存放数据的仓库。
其主要特征:
1.实现了数据共享,减少了数据冗余;
2.数据储存结构化;
3.增强了数据的独立性;
4.加强了对数据的保护。
易错
下面列出的数据库管理技术发展的三个阶段中,没有专门的软件对数据进行管理的是( )
I.人工管理阶段
II.文件系统阶段
III.数据库阶段
A.I和II
B.只有II
C.II和III
D.只有I
答案应该是D,这里需要说明专门的软件是广义上专门的软件,II阶段的文件系统也算一种管理数据的软件(计算机科学和数据库发展的标准定义来看,文件系统阶段被视为出现了专门的数据管理软件,这个软件就是操作系统提供的文件系统。),所以答案应该是D。
常见的数据库
关系型数据库
都可以使用统一的SQL语言管理。一个关系就是一个二维表,关系就是二维表的集合(所以称之为关系型数据库)。
- mysql:开源的数据库,但是已被甲骨文公司收购,为了对抗甲骨文的收购行为,原始维护者开发了MariaDB分支,完全兼容mysql。
- Oracle:甲骨文公司的数据库,是第一个商业化的关系型数据库(2.5kw行屎山代码的数据库),数据库非常稳定、可靠;
- SQLServer:微软公司出品的数据库,主要用于Windows环境下,.NET技术栈的首选数据库。
- Sqlite:轻量级的数据库,不需要数据库的服务端,一个
.db文件就是它的全部。常见于嵌入式系统,或者C端软件配置(比如微信客户端就是用sqlite存储聊天数据),多用户写入数据会锁库,并发差,大数据量的情况下性能较差。 - ACCESS:微软office套件里的数据库,常见于windows IOT设备的数据库,大数据量的情况下性能较差。
- PostgreSQL:现如今最受欢迎的数据库,开源,对SQL语言标准做了高度兼容,通过扩展插件实现更多功能。
非关系型数据库(NoSQL)
不采用传统的二维表的数据结构,而是根据特点使用场景对键值(KV)、文档、列族或者图数据。特点是高性能、灵活性强、支持大规模数据处理和分布式存储。NoSQL牺牲了严格的ACID事务特性,转而追求高性能、高可用性和可扩展性。
- MongoDB:文档型数据库,具有高度的动态性和可扩展性;
- Redis:内存型的键值数据库(键值数据库只适合做缓存,不要用键值数据库做主力数据存储的数据库类型)
数据模型
数据模型的分类
数据模型是一种抽象的概念工具。用于描述数据的结构、数据之间的联系和数据的约束条件。
- 数据模型(Data Model):是数据特征的抽象。数据模型是数据库系统的核心与基础,从抽象描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供了一个抽象的框架。数据模型描述了三个部分:数据结构、数据操作和数据的约束条件。
- 数据结构:主要描述数据的类型、内容、性质与数据间的联系。是对系统静态特征的描述。(比如在mysql中,定义表头、列的名称和数据类型(比如int、float等),表与表之间通过主键和外键建立联系);
- 数据操作:主要描述在相应数据结构上的操作类型和操作方式,是对系统动态特征的描述。(比如在mysql中,通过INSERT(插入)、DELETE(删除)、UPDATE(更新)、SELECT(查询)等进行数据操作);
- 数据的约束条件:主要描述数据结构内,数据间的语法、词义联系。他们之间的制约和依存关系,以及数据动态的变化规则,以确保数据的正确、有效和相容。(比如在mysql中,主键不可为空值,或者其他数据专属的逻辑:比如
用户ID不能重复(主键约束),年龄不能小于0(检查约束),订单必须属于一个存在的用户(外键约束))
数据模型的抽象
概念数据模型:比如对数据进行分类:确定用户信息需求,聚焦于对业务需求的理解,不涉及具体DBMS和物理存储的细节;
逻辑数据模型:基于概念数据模型的细化,用于明确数据库的结构:确定数据库表的结构、字段类型和数据直接的关系等;
物理数据类型:最贴近实际数据库存储的模型,由DBMS系统管理:考虑存储在物理设备上的存储结构和访问方式。
在物理世界中,通过概念数据模型描述物理世界的规律,再用逻辑数据模型将其转化为机器可读的数据类型,最后通过物理数据类型将数据落地为物理存储。
概念结构设计,首先需要进行业务需求分析,通过调查分析,了解用户的信息需求和处理需求,然后进行归纳于数据抽象,使用E-R构建实体联系图。
常见的数据模型
关系模型(重要)
关系模型是最为广泛使用的数据组织形式,以二维表的形式组织数据。二维表中,每一行代表一个实例,每一列代表一个属性。
- 关系(Relation)(联系):关系模型中的表称为关系,由行和列组成的二维数据结构,联系是实体之间的相关关联,在E-R图上用菱形表示。一般来说,可以区分为一对一(1:1)、一对多(1:n)、多对多(m:n)。
- 元组(Tuple)(行、属性、记录):关系模型中的每一行称为元组,代表一个实例的完整数据记录。
- 属性(Attribute)(列、字段):关系模型中的每一列称为属性,用于描述数据的特定特征或字段。
- 域(Domain):属性所取值的集合成为域,即字段的取值范围。
- 候选键(Candidate Key):能够唯一标识关系中每个元组的属性或属性组合称为候选键。
- 主键(Primary Key)(主码):从候选键中选定的键,用来唯一表示关系中的元组,也称为主码。
- 外键(Foreign Key)(外码):关系中的某个属性,它引用自另一个关系中的主键,用来建立表与表之间的关系。
- 实体:客观上可以相互区分的事物称为实体,在E-R图上用矩形表示。
- 实体集:具有相同类型、相同属性的实体集合称为实体集。
- 实体型:一类实体所具有的共同特征或者属性的集合称之为实体型。
关系数据库的规范化
关系数据库规范化是数据库中的重要环节,也是数据库设计的重要原则之一。
规范化设计多个范式,从高到低分为:第五范式(5NF)、第四范式(4NF)、BC范式(BCNF)、第三范式(3NF)、第二范式(2NF)、第一范式(1NF)。
只有符合第一范式的数据库才可以被称为关系型数据库。符合高一级范式的同时,必须同时符合低一级范式。
一般来说,数据库需要至少满足第三范式(3NF)。
第一范式(1NF)
要求数据库的表中,每个属性(列)都必须是不可分割的原子值。(属性不可拆分)。
不符合第一范式的例子
| **学生ID(主键)** | **姓名** | **已选课程** |
|---|---|---|
| 101 | 张三 | 数学,物理,化学 |
| 102 | 李四 | 英语,历史 |
不符合的原因:在“已选课程”这个属性中,包含了多个值,即非原子属性。
符合第一范式的例子
| **学生ID(主键)** | **姓名** | **已选课程** |
|---|---|---|
| 101 | 张三 | 数学 |
| 101 | 张三 | 物理 |
| 101 | 张三 | 化学 |
| 102 | 李四 | 英语 |
| 102 | 李四 | 历史 |
第二范式(2NF)
要求满足第一范式的基础上,所有非主键的属性(列)都必须完全依赖主键,不能只依赖主键的一部分,主要出现于使用了联合主键的情况下(也就是多对多的情况)。
简单来说就是使用多个字段同时作为主键的时候,其他字段必须和全部的主键存在关联。
不符合第二范式的例子
| **订单ID(主键)** | **产品ID(主键)** | **产品名称** | **产品价格** | **购买数量** |
|---|---|---|---|---|
| 1 | A01 | 笔记本 | 2.5 | 10 |
| 2 | A01 | 笔记本 | 2.5 | 5 |
假设这里的主键是联合主键,即订单ID和产品ID共同作为主键。
那么,属性购买数量依赖于订单ID和产品ID;但是属性产品名称和属性产品价格只依赖于产品ID,而不依赖订单ID。
如果需要符合第二范式,则需要将该数据表拆分为两个数据表,比如:
符合第二范式的例子
订单表
| **订单ID(主键)** | **产品ID** | **购买数量** |
|---|---|---|
| 1 | A01 | 10 |
| 2 | A01 | 5 |
产品表
| **产品ID(主键)** | **产品名称** | **产品价格** |
|---|---|---|
| A01 | 笔记本 | 2.5 |
第三范式(3NF)
要求满足第二范式的基础上,所有非主键的列都必须主键依赖主键,而不能依赖其他非主键的列。(传递依赖)
简单来说,就是“表中不能有不依赖于主键,而依赖于其他列的列”。如果列 A 依赖列 B,列 B 又依赖主键,那么列 A 就是传递依赖。
消除传递依赖可以减少数据冗余和更新异常。进一步提高数据一致性和可维护性。
不符合第三范式的例子
| **订单ID(主键)** | **顾客ID** | **顾客姓名** | **顾客电话** | **订单金额** |
|---|---|---|---|---|
| 1001 | 201 | 张三 | 1380000 | 200 |
| 1002 | 201 | 张三 | 1380000 | 150 |
在这里面的依赖关系是:
- 直接依赖:
顾客ID、订单金额直接依赖于订单ID; - 传递依赖:
顾客姓名、顾客电话依赖于顾客ID,而不是依赖于订单ID。
虽然顾客姓名和顾客电话最终也由订单ID决定,但这是间接依赖:必须通过顾客ID这个中间环节。
如果需要符合第三范式,则需要对数据表进行拆分:
符合第三范式的例子
订单表:只存放与订单有关的数据:
| **订单ID(主键)** | **顾客ID** | **订单金额** |
|---|---|---|
| 1001 | 201 | 200 |
| 1002 | 201 | 150 |
顾客信息表:单独存放顾客信息,将顾客姓名和顾客电话直接依赖于顾客ID:
| **顾客ID(主键)** | **顾客姓名** | **顾客电话** |
|---|---|---|
| 201 | 张三 | 1380000 |
数据库设计
概述
数据库设计主要有两个方面,分别是结构特性设计和行为特性设计。
- 结构特性设计:确定数据库的数据模型,在满足需求要求的前提下尽可能减少冗余,实现数据共享。
- 行为特性设计:确定数据库应用的行为和的动作,应用的行为由应用程序体现,所以行为特性设计主要是应用程序的设计。