@
数据库是什么?数据库的概念
在学习数据库之前,应该先理解什么是数据。
数据存储方式
计算机数据(Data)的存储一般以硬盘为数据存储空间资源,从而保证计算机内的数据能够持续保存。对于数据的处理,一般会采用数据库相关的技术进行处理,从而保证数据处理的高效性。
采用数据库的管理模式不仅提高了数据的存储效率,而且在存储的层面上提高了数据的安全性。通过分类的存储模式让数据管理更加安全便捷,更能实现对数据的调用和对比,并且方便查询等操作的使用。
数据概念
描述事物的符号称为数据。是数据库中存储的基本对象,是按一定顺序排列组合的物理符号,数据有多种表现形式,可以是数字,也可以是文字、图形、图像、声音、语言等它们都可以经过数字化后存入计算机。在数据库中数据表示记录,例如,在学生管理数据库中,记录学生的信息包括学号、姓名、性别、年龄、籍贯和联系电话等,这些信息就是数据。
- 信息是指对数据进行加工处理后提取的对人类社会实践和生产活动产生决策影响的数据。信息就是数据中所包含的意义。未经过加工的数据只是一种原始材料,它的价值在于记录了客观世界的事实。
例如:
-
在学生档案中,学生信息是由学号、姓名、性别、年龄、籍贯、联系电话等特征组成的,那么这些具体的特征值所构成的一条记录就是一个学生的信息数据,例如“2016010102,张三,男,26,山西,计算机学院,185********”。
-
值得注意的是,数据的描述形式还不能完全表达其内容,需要经过解释。例如,对于上面这条学生记录,了解其含义的人会得到这样的信息:张三的学号是 2016010102,今年 26 岁,山西人,就读于计算机学院,他的联系电话是 185********;而不了解其语义的人则无法理解其含义。
-
所以,数据和对数据的解释是不可分的,数据的解释是指对数据含义的说明,数据的含义也称数据的语义,因此数据与其语义密不可分,没有语义的数据是没有意义和不完整的。
数据库(Database)概念
数据库指长期存储在计算机内的、有组织的、可共享的数据集合。通俗的讲,数据库就是存储数据的地方。在生活中,每个人都在使用数据库。我们在电话簿里查找名字时,就是在使用数据库。在某个浏览器上进行搜索时,也是在使用数据库。
- 数据库实际上是一个文件集合,是一个存储数据的仓库,是一个文件系统,数据库按照特定的格式把数据存储起来,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,用户可以对存储的数据进行增删改查操作。
在日常生活中,人们可以直接用中文、英文等自然语言描述客观事物。在计算机中,则要抽象出对这些事物感兴趣的特征,并组成一个记录来描述。
数据库的组成
数据库系统(Database System,DBS)由硬件和软件共同构成。数据库涉及到的技术,包括数据库系统、SQL 语言和数据库访问接口。
- 硬件主要用于存储数据库中的数据,包括计算机、存储设备等。
- 软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统,以及支持多种语言进行应用开发的访问技术等。
数据库系统是指在计算机系统中引入数据库后的系统。完整的数据库系统结构关系如图所示:
由图可知,一个完整的数据库系统一般由数据库、数据库管理系统、应用开发工具、应用系统、数据库管理员和用户组成。
数据库系统主要有以下 3 个组成部分:
- 数据库:用于存储数据的地方。
- 数据库(DataBase,DB)提供了一个存储空间来存储各种数据,可以将数据库视为一个存储数据的容器。一个数据库可能包含许多文件,一个数据库系统中通常包含许多数据库。
- 数据库管理系统:用于管理数据库的软件。
- 数据库管理系统(Database Management System,DBMS)是用户创建、管理和维护数据库时所使用的软件,位于用户和操作系统之间,对数据库进行统一管理。DBMS 能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性。
- 我们常说 XX 数据库,其实实质上是 XX 数据库管理系统。目前,较为流行的数据库管理系统有 MySQL、SQL Server、Oracle 和 DB2 等。
- 虽然已经有了 DBMS,但是在很多情况下,DBMS 无法满足对数据管理的要求。
- 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库库的软件补充。
- 数据库应用程序(DataBase Application)的使用可以满足对数据管理的更高要求,还可以使数据管理过程更加直观和友好。数据库应用程序负责与 DBMS 进行通信、访问和管理 DBMS 中存储的数据,允许用户插入、修改、删除数据库中的数据。
数据库管理系统的一些功能
-
数据定义功能:DBMS 提供数据定义语言(Data Definition Language,DDL),用户通过它可以方便地对数据库中的数据对象进行定义。
-
数据操纵功能:DBMS 还提供数据操纵语言(Data Manipulation Language,DML),用户可以使用 DML 操作数据,实现对数据库的基本操作,如查询、插入、删除和修改等。
-
数据库的运行管理:数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制,以保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。例如:
-
数据的完整性检查功能保证用户输入的数据应满足相应的约束条件;
-
数据库的安全保护功能保证只有赋予权限的用户才能访问数据库中的数据;
-
数据库的并发控制功能使多个用户可以在同一时刻并发地访问数据库的数据;
-
数据库系统的故障恢复功能使数据库运行出现故障时可以进行数据库恢复,以保证数据库可靠地运行。
-
-
提供方便、有效地存取数据库信息的接口和工具:编程人员可通过编程语言与数据库之间的接口进行数据库应用程序的开发。数据库管理员(Database Administrator,DBA)可通过提供的工具对数据库进行管理。
- 数据库管理员是维护和管理数据库的专门人员。
-
数据库的建立和维护功能:数据库功能包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监控、分析功能等。这些功能通常由一些使用程序来完成。
了解SQL语言
MySQL 服务器正确安装以后,就已经完成了一个完整的 DBMS 的搭建,可以通过命令行管理工具或者图形化的管理工具对 MySQL 数据库进行操作。这种对数据库进行查询和修改操作的语言叫做 SQL(Structured Query Language,结构化查询语言)。
SQL 语言是目前广泛使用的关系数据库标准语言,是各种数据库交互方式的基础。
SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。与其他程序设计语言(如 C语言、Java 等)不同的是,SQL 由很少的关键字组成,每个 SQL 语句通过一个或多个关键字构成。
SQL 具有如下优点。
- 一体化:SQL 集数据定义、数据操作和数据控制于一体,可以完成数据库中的全部工作。
- 使用方式灵活:SQL 具有两种使用方式,可以直接以命令方式交互使用;也可以嵌入使用,嵌入C、C++、Fortran、COBOL、Java 等语言中使用。
- 非过程化:只提操作要求,不必描述操作步骤,也不需要导航。使用时只需要告诉计算机“做什么”,而不需要告诉它“怎么做”,存储路径的选择和操作的执行由数据库管理系统自动完成。
- 语言简洁、语法简单:该语言的语句都是由描述性很强的英语单词组成,而且这些单词的数目不多。
SQL 包含以下 4 部分:
- 数据定义语言(DDL):DROP、CREATE、ALTER 等语句。
- 数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。
- 数据查询语言(DQL):SELECT 语句。
- 数据控制语言(DCL): GRANT、REVOKE、COMMIT、ROLLBACK 等语句。
下面是一条 SQL 语句的例子,该语句声明创建一个名叫 students 的表:
CREATE TABLE students (
student_id INT UNSIGNED,
name VARCHAR(30) ,
sex CHAR(1),
birth DATE,
PRIMARY KEY(student_id)
);
该表包含 4 个字段,分别为 student_id、name、sex、birth,其中 student_id 定义为表的主键。
现在只是定义了一张表格,但并没有任何数据,接下来这条 SQL 声明语句,将在 students 表中插入一条数据记录:
INSERT INTO students (student_id, name, sex, birth)
VALUES (41048101, 'MySQL教程', '1', '2013-02-14');
执行完该 SQL 语句之后,students 表中就会增加一行新记录,该记录中字段 student_id 的值为“41048101”,name 字段的值为“MySQL教程”。sex 字段值为“1”,birth 字段值为“2013-02-14”。
再使用 SELECT 查询语句获取刚才插入的数据,如下:
SELECT name FROM students WHERE student_id=41048101;
+--------------+
| name |
+--------------+
| MySQL教程 |
+--------------+
注意:SQL 语句不区分大小写,许多 SQL 开发人员习惯对 SQL 本身的关键字进行大写,而对表或者列的名称使用小写,这样可以提高代码的可阅读性和可维护性。大多数数据库都支持通用的 SQL 语句,同时不同的数据库具有各自特有的 SQL 语言特性。
数据库访问接口
不同的程序设计语言会有各自不同的数据库访问接口,程序语言通过这些接口,执行 SQL 语句,进行数据库管理。
主要的数据库访问接口主要有 ODBC、JDBC、ADO.NET 和 PDO。
- ODBC(Open Database Connectivity,开放数据库互连):为访问不同的 SQL 数据库提供了一个共同的接口。ODBC 使用 SQL 作为访问数据的标准。这一接口提供了最大限度的互操作性。一个应用程序可以通过共同的一组代码访问不同的 SQL 数据库管理系统。
- 一个基于 ODBC 的应用程序对数据库的操作不依赖任何 DBMS,不直接与 DBMS 打交道,所有的数据库操作由对应的 DBMS 的 ODBC 驱动程序完成。也就是说,不论是 MySQL 还是 Oracle 数据库,均可用 ODBC API 进行访问。由此可见,ODBC 的最大优点是能以统一的方式处理所有的数据库。
- JDBC(Java Data Base,Java 数据库连接)用于 Java 应用程序连接数据库的标准方法,是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。
- ADO.NET是微软在 .NET 框架下开发设计的一组用于和数据源进行交互的面向对象类库。ADO.NET 提供了对关系数据、XML 和应用程序的访问,允许和不同类型的数据源以及数据库进行交互。
- PDO(PHP Data Object)为 PHP 访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO 是 PHP 5 新加入的一个重大功能。
为什么要使用数据库?
数据库的作用
随着互联网技术的高速发展,预计2020 年底全世界网民的数量将达到 50 亿。网民数量的增加带动了网上购物、微博,网络视频等产业的发展。那么,随之而来的就是庞大的网络数据量。大量的数据正在不断产生,如何安全有效地存储、检索,管理它们,对数据的有效存储、高效访问、方便共享和安全控制等问题就成为了信息时代一个非常重要的问题。
使用数据库可以高效且条理分明地存储数据,它使人们能够更加迅速和方便地管理数据,主要体现在以下几个方面。
- 数据库可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。数据库可以对数据进行分类保存,并且能够提供快速的查询。
- 例如,我们平时使用百度搜索内容时,百度也是基于数据库和数据分类技术来达到快速搜索的目的。
- 数据库可以有效地保持数据信息的一致性、完整性、降低数据冗余。可以很好地保证数据有效、不被破坏,而且数据库自身有避免重复数据的功能,以此来降低数据的冗余。
- 数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。
- 例如,如果把所有员工信息和工资数据都放在磁盘文件上,则工资的保密性就无从谈起。如果把员工信息和工资数据放在数据库中,就可以只允许查询和修改员工信息,而工资信息只允许指定人(如财务人员)查看,从而保证数据的安全性。
- 数据库技术能够方便智能化地分析,产生新的有用信息。
- 例如,超市中把物品销售信息保存在数据库中,每个月销售情况的排名决定了下半月的进货数量。数据库查询的结果实际上产生了新的数据信息。
- 数据挖掘、联机分析等技术近年来发展非常快,其核心意义在于从一堆数据中分析出有用的信息。
数据库的存储结构
数据库的存储结构概念:数据库的存储结构是指数据库中的物理数据和逻辑数据的表示形式、物理数据和逻辑数据之间关系映射方式的描述。在数据库技术中,可以使用两种形式描述客观现实的数据:物理数据描述和逻辑数据描述。物理数据和逻辑数据之间的转换通过数据库管理系统实现。
物理数据描述
物理数据概念:物理数据是指数据在存储设备上的存储方式,物理数据是实际存放在存储设备上的数据,这些数据也称为物理记录。根据物理记录存储的位置,又可以分为有序存储和无序存储。
在物理数据描述中,使用的数据描述术语包括以下各项。
- 位(bit):二进制的一个单位称为位,位只能取 1 或 0。
- 字节(byte):8 个位称为一个字节,可以存放对应 ASCII 码的一个字符。
- 字(word):若干个字节组成一个字。一个字所含的二进制的位数称为字长,许多计算机的字长是不同的,例如计算机的字长可以是 8 位、16 位、24 位、32 位等。
- 块(block):内存储器和外存储器交换信息的最小单位,又称为物理块或物理记录,每块的大小通常为 256 字节、512 字节、1024 字节等。
- 卷(volume):一台输入输出设备所能装载的全部有用信息,例如磁带机的一盘磁带即为一卷,磁盘设备的一个盘组也是一卷。
- 无序存储(unordered):数据记录按照插入的顺序进行存储。
逻辑数据描述
逻辑数据概念:逻辑数据描述是指人为用于操作的数据形式,逻辑数据是一种抽象的概念,是对客观现实世界的反映和记录,这些数据也可以称为逻辑记录。
逻辑数据包含两个层次,一个层次是对客观现实信息世界的描述,另一个层次是对数据库管理系统中数据的描述。
在对客观现实信息世界的描述中,使用的术语包括以下几项。
- 实体(entity):客观现实存在的东西使用实体来描述。实体既可以是具体的、有形的对象,也可以是抽象的、无形的对象。
- 实体集(entities):特性完全相同的同类实体的集合称为实体集。
- 属性(attribute):实体的特性称为属性。每个属性都有一个值域,这些值域可以是整数类型、浮点数类型、字符类型或日期类型等。
- 标识符(identifier):能够唯一地标识每个实体的属性或属性集。
举个简单的例子:
假如有一个图书馆(数据库 data),
图书馆里面有上万本书(实体集合 entities),书可以被借走和归还,所有书的借书过程(实体集合 entities),归还过程(实体集合 entities)
图书馆里面每本书(实体 entity),这本书的一次借书和归还过程(实体 entity)
每本书都包括书名、书号、出版日期、页数、价格以及出版社等(属性 attribute),这些属性对应的值域分别为字符类型、字符类型、日期类型、整数类型、浮点数类型和字符类型等
每本书有它单独的书号(标识符 identifier),来记录这本书所在位置,每个人要借书有自己唯一的借书证号(标识符 identifier)
这些逻辑数据最终要通过数据库管理系统来转换成物理数据。下面以关系型数据库管理系统为例进行介绍。
- 数据项(data item):也称为字段(field),标记实体属性的可以命名的最小信息单位,数据项的命名一般采用属性的描述性名称。
- 元组(tuple):也称为记录(record),数据项的集合称为元组。一个元组表示一个具体的实体。
- 关系(relation):在关系型数据库系统中,同一类元组所在的集合称为关系。关系适用于描述实体集,它包括一个实体集的所有元组。
- 键码(key):在关系型数据库系统中,能够唯一地标识关系中每个元组的数据项或数据项的组合称为关系的键码。
客观实体经过两层逻辑数据的描述,最后转变成实际存储的物理数据。相信你已经可以理解了。
数据库在开发中的作用
从数据库系统应用角度来看,数据库系统常见的运行与应用结构有:客户端/服务器结构(Client/Server,C/S)、浏览器/服务器结构(Brower/Server,B/S)。
在客户端/服务器(Client/Server,C/S)结构中
- 数据库的使用者(如 DBA、程序设计者)通过命令行客户端、图形化界面管理工具或应用程序等连接到数据库管理系统,可以通过数据库管理系统查询和处理存储在底层数据库中的各种数据。
- 数据库使用者与命令行客户端、图形化界面管理工具或应用程序等直接交互,而不与数据库管理系统直接联系。
- 在这种结构中,命令行客户端、图形化界面管理工具或应用程序等称为“客户端”或“前台”,主要完成与数据库使用者的交互任务;而数据库管理系统则称为“服务器”或“后台”,主要负责数据管理。这种结构经常被称为“C/S”结构。
- 在客户端/服务器模式中,客户端和服务器可以同时工作在同一台计算机上,这种工作方式称为“单机方式”;也可以“网络方式”运行,即服务器被安装和部署在网络中某一台或多台主机上。
数据库能有效存储数据,读取数据、查找数据更是方便,其实那些管理软件就是通过软件的界面向内部的数据库进行数据的增、删、改、查操作。
数据库类型
DBMS(数据库管理系统)主要通过数据的保存格式进行分类,现阶段主要分为以下几种类型。分别是关系型数据库和非关系型数据库。
关系型数据库(Relational Database,RDB)
关系型数据库是现在应用最广泛的数据库。关系型数据库在 1969 年诞生,可谓历史悠久。和 Excel 工作表一样,关系型数据库也采用由行和列组成的二维表来管理数据,所以简单易懂。同时,它还使用 SQL(Structured Query Language,结构化查询语言)对数据进行操作。
关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
传统的关系型数据库采用表格的存储方式,数据以行和列的方式进行存储,要读取和查询都十分方便.
简单说,关系型数据库是由多张能互相连接的表组成的数据库。
-
优点
- 都是使用表结构,格式一致,易于维护。
- 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
- 数据存储在磁盘中,安全。
-
缺点
- 读写性能比较差,不能满足海量数据的高效率读写。
- 不节省空间。因为建立在关系模型上,就要遵循某些规则,比如数据中某字段值即使为空仍要分配空间。
- 固定的表结构,灵活度较低。
常见的关系型数据库有 Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access 和 MySQL 等。
非关系型数据库
非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。
通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。
-
优点
- 非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。支持多种特殊格式,使用灵活,应用场景广泛,
- 速度快,效率高。 NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
- 海量数据的维护和处理非常轻松。
- 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
- 可以实现数据的分布式处理。
-
缺点
- 非关系型数据库暂时不提供 SQL 支持,学习和使用成本较高。
- 非关系数据库没有事务处理,没有保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
- 功能没有关系型数据库完善。
常见的非关系型数据库类型有 面向文档,列存储,XML,键值存储数据库等。
具有代表性的非关系型数据库有,Neo4j、MongoDB、Redis、Memcached、MemcacheDB 和 HBase 等。
面向文档(Document-Oriented)数据库
文档型数据库的灵感来自于 Lotus Notes 办公软件,和最后一种键值存储数据库类似。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
面向文档数据库会将数据以文档的形式存储。每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。
数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。
具有代表性的面向文档数据库有 MongDB 和 CouchDB。
列存储(Column-oriented)数据库
列存储数据库将数据存储存在列族(column family)中,一个列族用来存储经常被一起查询的相关数据。
- 例如,有一个 Person 类,我们经常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
列存储数据库通常用来应对分布式存储的海量数据。具有代表性的列存储数据库有 Cassandra 和 HBase。
XML 数据库(XML Database,XMLDB)
XML 数据库是一种支持对 XML(标准通用标记语言下的一个应用)格式文档进行存储和查询等操作的数据管理系统。在系统中,开发人员可以对数据库中的 XML 文档进行查询、导出和指定格式的序列化。
键值存储数据库(Key-Value Store,KVS)
键值存储数据库是用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。具有编程语言知识的读者可以把它想象成关联数组或者散列(hash)。
近年来,随着键值存储数据库被应用到 Google 等需要对大量数据进行超高速查询的 Web 服务当中,它正逐渐为人们所关注。
具有代表性的键值存储数据库有 Redis、Memcached 和 MemcachedDB