当前位置:网站首页>数据库系统原理与应用教程(007)—— 数据库相关概念

数据库系统原理与应用教程(007)—— 数据库相关概念

2022-07-07 10:09:00 睿思达DBA_WGX

数据库系统原理与应用教程(007)—— 数据库相关概念

一、数据(Data)

1、数据的概念

数据(Data)是描述事物的符号记录。数据具有如下特征:

(1)数据是事物属性的反映。比如:学生张三的性别为男,则 “男” 就是表示学生张三的性别属性的。

(2)数据受数据类型(数值型,字符串类型,日期型和逻辑型等)和取值范围的约束。下面的 emp 表中的数据 e_id(员工编号)数据类型为整数类型,则输入数据时只能输入整数,birth(出生日期)的数据类型为日期型,只能输入一个合法的日期。

mysql> desc emp;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| e_id   | int(11)      | NO   | PRI | NULL    |       |
| name   | char(20)     | YES  |     | NULL    |       |
| gender | char(2)      | YES  |     | NULL    |       |
| birth  | date         | YES  |     | NULL    |       |
| height | decimal(5,2) | YES  |     | NULL    |       |
| phone  | char(11)     | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
6 rows in set (0.02 sec)

-- 数据 e_id 类型出错
mysql> insert into emp values('abc','张涛','男','8888-88-88',78.5,'13782594456');
ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'e_id' at row 1

-- 数据 birth 类型出错
mysql> insert into emp values(1111,'张涛','男','8888-88-88',78.5,'13782594456');
ERROR 1292 (22007): Incorrect date value: '8888-88-88' for column 'birth' at row 1

(3)具有载体和表现形式。数据必须有一定的物理载体,比如 MySQL 数据库中的数据需要保存的计算机的硬盘上。

2、数据管理

数据管理包括数据的保存、数据维护、数据查询与统计三个方面的内容。

(1)组织和保存数据

关系数据库以表格的形式把数据保存到计算机的硬盘上。下面的命令是在 mydb 数据库中创建一张 stu 表,并且输入数据。

/* create table stu( s_id char(11) primary key, name char(20), gender char(2), birth date, height decimal(5,2), phone char(11) ); */
mysql> create table stu(
    ->     s_id char(11) primary key,
    ->     name char(20),
    ->     gender char(2),
    ->     birth date,
    ->     height decimal(5,2),
    ->     phone char(11)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into stu values('20210224001','张云','女','2002-2-23',56,'13603735899');
Query OK, 1 row affected (0.00 sec)

mysql> insert into stu values('20210224002','刘涛','男','2003-1-3',60,'13737345866');
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+-------------+--------+--------+------------+--------+-------------+
| s_id        | name   | gender | birth      | height | phone       |
+-------------+--------+--------+------------+--------+-------------+
| 20210224001 | 张云   || 2002-02-23 |  56.00 | 13603735899 |
| 20210224002 | 刘涛   || 2003-01-03 |  60.00 | 13737345866 |
+-------------+--------+--------+------------+--------+-------------+
2 rows in set (0.00 sec)

(2)数据的维护

数据的维护主要包括数据的增、删、改操作。增是指在表中增加行,删是指删除表中的行,改是指修改表中数据的取值。

-- 增加一行数据,使用 insert 命令
mysql> insert into stu values('20210224003','王阳明','男','2003-11-10',62,'13837345333');
Query OK, 1 row affected (0.01 sec)

-- 删除一行数据,使用 delete from 命令
mysql> delete from stu where s_id='20210224001';
Query OK, 1 row affected (0.02 sec)

-- 把张云的体重修改为 50 千克
mysql> update stu set height=50 where s_id='20210224002';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

-- 查看结果
mysql> select * from stu;
+-------------+-----------+--------+------------+--------+-------------+
| s_id        | name      | gender | birth      | height | phone       |
+-------------+-----------+--------+------------+--------+-------------+
| 20210224002 | 刘涛      || 2003-01-03 |  50.00 | 13737345866 |
| 20210224003 | 王阳明    || 2003-11-10 |  62.00 | 13837345333 |
+-------------+-----------+--------+------------+--------+-------------+
2 rows in set (0.00 sec)

(3)数据查询和统计

-- 查询王阳明的出生日期
mysql> select birth from stu where s_id='20210224003';
+------------+
| birth      |
+------------+
| 2003-11-10 |
+------------+
1 row in set (0.00 sec)

-- 统计男生人数
mysql> select count(*) from stu where gender='男';
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

二、数据库(DataBase,DB)

数据库是一个长期存储在计算机内、有组织、可共享、统一管理的数据集合。数据库是一个按数据结构来存储和管理数据的计算机软件系统。

(1)数据库是一个实体,它是能够合理保管数据的仓库,用户在该仓库中存放要管理的事务数据,数据和库两个概念结合成为数据库。

(2)数据库是数据管理的新方法和技术,他能更合理的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。

例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个数据库我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。当然,一个数据库中可以包含多张表格。

-- 打开数据库 mydb
mysql> use mydb
Database changed

-- 查看数据库中的表
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| emp            |
| stu            |
+----------------+
2 rows in set (0.00 sec)

三、数据库管理系统(DataBase Management System,DBMS)

数据库管理系统是位于用户应用程序与操作系统之间的一层数据管理软件,是数据库系统的核心组成部分,负责管理和维护数据库。能够提供数据的定义、维护、查询和统计等操作能能以及数据的安全性、完整性控制功能。流行的数据库管理系统有 Oracle、MySQL、DB2,SQL Server 等。DBMS 的工作原理如下图所示。

在这里插入图片描述

(1)接收应用程序的数据请求和处理请求;
(2)将用户的数据请求(高级语言/指令)转换成复杂的机器代码(底层指令);
(3)实现对数据库的操作(底层指令);
(4)从对数据库的操作中接受查询结果;
(5)对查询结果进行处理(格式转换);
(6)将处理结果返回给应用程序。

DBMS 的功能如下:

1、 定义数据库

一切和数据库结果相关的操作都属于定义数据库。包括新建数据库和表、修改数据库、修改表结构等操作。DBMS 提供相应数据定义语言(DDL)来定义数据库结构。

-- 创建数据库
mysql> create database employee;
Query OK, 1 row affected (0.00 sec)

-- 打开数据库
mysql> use employee;
Database changed

/* create table dept( d_id int primary key, name char(20) ); create table emp( e_id int primary key, name char(20), gender char(20), birth date, phone char(11) ); */

-- 创建表:dept
mysql> create table dept(
    ->     d_id int primary key,
    ->     name char(20)
    -> );
Query OK, 0 rows affected (0.03 sec)

-- 创建表:emp
mysql> create table emp(
    ->     e_id int primary key,
    ->     name char(20),
    ->     gender char(20),
    ->     birth date,
    ->     phone char(11)
    -> );
Query OK, 0 rows affected (0.01 sec)

2、操纵数据库

操纵数据库是指对表中数据的操作,包括对数据的增、删、改、查。DBMS 提供数据操纵语言(DML),实现对数据库数据的基本存取操作:插入、修改、删除和检索。

-- 增:添加行
mysql> insert into dept values(11,'财务部'),(12,'销售部'),(13,'生产部');

mysql> insert into emp values(1101,'张云飞','男','1998-12-2','13782556699');
Query OK, 1 row affected (0.00 sec)

mysql> insert into emp values(1102,'刘明明','男','1989-10-12','13682553322');
Query OK, 1 row affected (0.00 sec)

mysql> insert into emp values(1201,'王静静','女','1990-11-8','13782554488');
Query OK, 1 row affected (0.01 sec)

-- 查看数据
mysql> select * from dept;
+------+-----------+
| d_id | name      |
+------+-----------+
|   11 | 财务部    |
|   12 | 销售部    |
|   13 | 生产部    |
+------+-----------+
3 rows in set (0.00 sec)

mysql> select * from emp;
+------+-----------+--------+------------+-------------+
| e_id | name      | gender | birth      | phone       |
+------+-----------+--------+------------+-------------+
| 1101 | 张云飞    || 1998-12-02 | 13782556699 |
| 1102 | 刘明明    || 1989-10-12 | 13682553322 |
| 1201 | 王静静    || 1990-11-08 | 13782554488 |
+------+-----------+--------+------------+-------------+
3 rows in set (0.00 sec)

-- 删除行
mysql> delete from dept where d_id=13;
Query OK, 1 row affected (0.00 sec)

-- 查看数据
mysql> select * from dept;
+------+-----------+
| d_id | name      |
+------+-----------+
|   11 | 财务部    |
|   12 | 销售部    |
+------+-----------+
2 rows in set (0.00 sec)

-- 修改数据
mysql> update emp set phone='10086' where e_id=1201;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

-- 查看数据
mysql> select * from emp;
+------+-----------+--------+------------+-------------+
| e_id | name      | gender | birth      | phone       |
+------+-----------+--------+------------+-------------+
| 1101 | 张云飞    || 1998-12-02 | 13782556699 |
| 1102 | 刘明明    || 1989-10-12 | 13682553322 |
| 1201 | 王静静    || 1990-11-08 | 10086       |
+------+-----------+--------+------------+-------------+
3 rows in set (0.00 sec)

3、控制功能

DBMS 提供数据控制功能,即数据的安全性控制、完整性控制和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效。

(1)安全性控制

安全性控制为不同的用户设置不同的访问权限,以保证数据不被非法用户使用。数据的安全性控制是为了保证数据库的数据安全可靠,防止不合法的使用造成数据泄露和破坏,即避免数据被人为偷看、篡改或破坏。MySQL 通过 grant(授权)和 revoke(回收权限)来实现用户权限的授予和回收。

(2)完整性控制

数据的完整性控制是为了保证数据库中的数据正确、有效和相容,以防止不合语义的错误数据被输入或输出。关系数据库的完整性包括实体完整性、参照完整性和用户自定义完整性。

-- 实体完整性:主键不能取空值
-- 定义 d_id 为主键,则插入和修改数据时该列的值不能为空,也不能取重复值
/* create table dept( d_id int primary key, name char(20) ); */
mysql> create table dept(
    ->     d_id int primary key,  
    ->     name char(20)
    -> );
Query OK, 0 rows affected (0.01 sec)

-- d_id 不能为空
mysql> insert into dept values(null,'管理系');
ERROR 1048 (23000): Column 'd_id' cannot be null

mysql> insert into dept values(1,'管理系');
Query OK, 1 row affected (0.00 sec)

-- d_id 不能重复
mysql> insert into dept values(1,'经济系');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

-- 参照完整性:外键的值必须从与之对应的父表的主键中取值
-- 定义 d_id 为外键,与表 dept 中的列 d_id 对应
/* create table stu( s_id char(11) primary key, s_name char(20), gender char(2), d_id int, foreign key(d_id) references dept(d_id) ); */

mysql> create table stu(
    ->     s_id char(11) primary key,
    ->     s_name char(20),
    ->     gender char(2),
    ->     d_id int,
    ->     foreign key(d_id) references dept(d_id)
    -> );
Query OK, 0 rows affected (0.00 sec)

-- 在子表中插入数据
mysql> select * from dept;
+------+-----------+
| d_id | name      |
+------+-----------+
|    1 | 管理系    |
+------+-----------+
1 row in set (0.00 sec)

-- 外键 d_id 可以取空值 
mysql> insert into stu values('20210224001','王鹏','男',null);
Query OK, 1 row affected (0.01 sec)

-- 外键 d_id 为 1,插入成功(父表中存在 d_id 为 1 的记录)
mysql> insert into stu values('20210224002','刘明','男',1);
Query OK, 1 row affected (0.01 sec)

-- 外键 d_id 为 2,插入失败(父表中不存在 d_id 为 2 的记录)
mysql> insert into stu values('20210224003','张静','女',2);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constra
int fails (`aaa`.`stu`, CONSTRAINT `stu_ibfk_1` FOREIGN KEY (`d_id`) REFERENCES `dept` (`d_id`))

-- 用户自定义完整性:针对某一具体关系数据库的约束条件,由用户定义规则。
-- 例如:学生成绩范围在 0~100 之间。

(3)并发控制

并发控制是确保及时纠正由并发操作导致的错误的一种机制。并发控制指的是当多个用户同时更新数据时,用于保护数据库完整性的各种技术。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。并发控制的基本单位是事务。

4、故障恢复——数据备份和恢复

备份对于数据库而言是至关重要的。当数据文件发生损坏、MySQL服务出现错误、系统内核崩溃、计算机硬件损坏或者数据被误删等事件时,使用一种有效的数据备份方案,就可以快速解决以上所有问题。

MySQL 提供了多种备份方案,包括:逻辑备份、物理备份、完全备份以及增量备份。

(1)物理备份通过直接复制包含有数据库内容的目录与文件实现,这种备份方式适用于对重要的大规模数据进行备份,并且要求实现快速还原的生产环境。典型的物理备份就是复制 MySQL 数据库的部分或全部目录,物理备份还可以备份相关的配置文件。采用物理备份需要 MySQL 处于关闭状态或者对数据库进行锁操作,防止在备份的过程中改变发送数据。物理备份可以使用 mysqlbackup 对 InnoDB 数据进行备份,使用 mysqlhotcopy 对 MyISAM 数据进行备份。

(2)逻辑备份通过保存代表数据库结构及数据内容的描述信息实现,比如保存创建数据结构以及添加数据内容的 SQL 语句,这种备份方式适用于少量数据的备份与还原。逻辑备份的优势在于不管是服务层面、数据库层面还是数据表层面的备份都可以实现,这种备份与系统、硬件无关。

(3)完全备份将备份某一时刻所有的数据,增量备份仅备份某一段时间内发生过改变的数据。通过物理或逻辑备份工具就可以完成完全备份,而增量备份需要开启 MySQL 二进制日志,通过日志记录数据的改变,从而实现增量差异备份。

5、数据传输

DBMS 提供处理数据的传输,实现用户程序与 DBMS 之间的通信。

四、数据库系统(DataBase System,DBS)

数据库系统由数据库、数据库管理系统、数据库应用系统、数据库管理员和用户构成。如下图所示:

在这里插入图片描述

五、数据库的三级模式结构

数据库的三级模式结构包括外模式、概念模式和内模式。数据库的三级模式结构有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。

用户级对应外模式,概念级对应概念模式,物理级对应内模式。不同级别的用户对数据库形成不同的视图。所谓视图,就是指观察、认识和理解数据的范围、角度和方法,是数据库在用户眼中的反映。不同层次(级别)用户所看到的数据库是不同的。

1、外模式

外模式(External Schema)又称子模式(Subschema)或用户模式(User Schema),对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的数据。用户可以通过数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行操作。外模式反映了数据库系统的用户观。

子模式是完全按照用户自己对数据的需要、站在局部的角度进行设计的。由于一个数据库系统有多个用户,所以就可能有多个子模式。由于子模式是面向用户或程序设计的,所以被称为用户数据视图。

从逻辑关系上看,子模式是模式的一个子集,从一个模式可以导出多个不同的子模式。以子模式为框架的数据库为用户数据库。子模式具有如下优点:

(1)使用子模式,用户不必考虑那些与子集无关的数据,也无需了解数据的存储结构,使用户使用数据的工作和程序设计的工作都得到了简化。

(2)用户只能对子集需要的数据进行操作,数据库的其他数据与用户是隔离的,有利于数据的安全和保密。

2、概念模式

概念模式又称模式(Schema)或逻辑模式(Logical Schema),对应于概念级。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的。概念模式反映了数据库系统的整体观。

逻辑模式是系统为了减少数据冗余、实现数据共享的目标并对所有用户的数据进行综合抽象而得到的统一的全局逻辑视图。一个数据库只能有一个逻辑模式,以逻辑模式为框架的数据库为概念数据库。

3、内模式

内模式(Internal Schema)又称存储模式(Access Schema)或物理模式(Physical Schema),对应于物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式反映了数据库系统的存储观。

物理模式的设计目标是将系统的模式(逻辑模式)组织成最优的物理模式,以提高数据的存取效率,改善系统的性能指标。以物理模式为框架的数据库为物理数据库。在数据库系统中,只有物理模式才是真正存在的,是真正存放在外存的实际数据文件。而概念数据库和用户数据库在计算机外存上不存在的。

用户数据库、概念数据库和物理数据库的关系是:
(1)概念数据库是物理数据库的逻辑抽象形式;
(2)物理数据库是概念数据库的具体实现;
(3)用户数据库是概念数据库的子集,也是物理数据库子集的逻辑描述。

六、数据库的二级映像技术

为了实现用户和数据之间的透明化,数据库管理系统提供了二级映像:(1)外模式/模式映像;(2)模式/内模式映像。二级映像保证了数据库系统中的数据能够具有较高的逻辑性独立性和物理独立性。

数据库的三级模式与二级映像如下图所示。

在这里插入图片描述

1、外模式/模式映像

数据库的每一个外模式都有一个外模式/模式映像,定义了外模式与模式之间的对应关系,外模式/模式映像一般在外模式中描述。

当模式变化时,DBA 可以通过修改映像的方法使外模式不变。由于应用程序是根据外模式设计的,只要外模式不改变,应用程序就不需要修改。外模式/模式映像技术不仅建立了用户数据库与逻辑数据库之间的对应关系,同时也保证了数据的逻辑独立性。

2、模式/内模式映像

模式/内模式映像是唯一的,因为数据库总只有一个模式和一个内模式,它存在于模式和内模式之间。模式/内模式映像定义了逻辑模式和内模式之间的对应关系。

当数据库的存储结构改变时,DBA 可以通过修改模式/内模式之间的映像使数据模式不发生变化。由于用户或程序是按数据的逻辑模式使用数据的,所以只要数据模式不变,用户仍然可以按原来的方式使用数据,程序也不需要修改。

模式/内模式映像技术不仅使用户或程序能够按照数据的逻辑结构使用数据,还提供了内模式变化而程序不变的方法,从而保证了数据的物理独立性。

原网站

版权声明
本文为[睿思达DBA_WGX]所创,转载请带上原文链接,感谢
https://wanggx.blog.csdn.net/article/details/125564247