详细解说关系型数据库
目录
1.1、认识关系型数据库
数据库简而言之就是数据的集合,它是由文件系统存储数据发展起来的,数据库系统解决了多人数据库读取和写入的并发性问题,同时它提供了事务的机制,使得存储和管理数据库数据更加安全可靠。数据库系统让用户只处理逻辑数据层,比如表和视图等。它使得用户可以使用简单易管理的方式来操作数据的数据。
1.1.1 什么是关系型数据库
数据技术经过几十年的发展,经历了人工管理、文件系统到现在的数据库管理,提供了对数据更高级和更有效的管理。数据库系统管理数据具有如下特点:
(1)使用数据模型表示复制的数据库结构,用户可以使用实体关系模型对数据进行建模,不仅可以表达数据本身,还可以描述数据之间的关系,这使得存储在数据库中的数据更容易理解和维护。
(2)数据系统将数据的逻辑结构与物理结构分离,用户可以简单地使用逻辑结构操作数据库,而不用考虑物理存储结构,简化了数据库操作的复杂性。一般来说,一个数据库系统可以分为如图1.1所示的3级。
(3)数据库系统提供了数据的控制功能,他提供了多用户并发机制,防止数据库数据被非法更改。数据库系统会提供数据的备份和恢复功能,可以避免出现灾难性时间导致的数据丢失。数据提供数据完整性功能,并且提供了必要的安全性机制。
关系型数据库系统是近30年来数据库系统的主流模型,他使用数据之间的关系模型来存储和管理数据库。关系型数据库的模型建立与20世纪70年代,美国的E.F.Codd发表了一遍名为《大型共享数据库的数据关系模型》的论文,他定义了一个基于数学几何理论的关系模型,关系型数据库是一个符合关系模型的数据库。
●注意:《大型共享数据库的数据关系模型》已经具有简体中文版本,感兴趣的用户可以通过凑所引擎了解关于这边论文的详细信息。
在现实世界汇总,大量的数据都是具有一些相关性的,关系型数据库系统就是更具数据的关系对数据进行结构化的组织和存储。对关系型数据库的定义简而言之就是:使用关系或二维表存储信息。二维表是由行(也可以称为元组)和列(也看可以称为属性)组成的,通常简称为表或者是关系型数据库的实体。表中的每一行都具有相同的列集,因此可以将关系型数据称为存储在关系表中的数据库。
举个例子,为了存储人事部门的数据,可以创建一个员工表和一个部门表,由于员工表中的每个人员信息都是属于部门,因此关系型数据库还会存储员工表和部门之间的引用关系。当没有使用关系型数据库系统时,认识部门可能使用Excel创建一张人员表,示意结构如图1.2所示。
人事部门还会创建一张部门表,部门表中包含了部门的名称、部门的位置部门的编号等信息,人员表的所属部门应该是要与部门表中的部门名称保持一致,否则数据库中的数据库就会出现混乱,如图1.3所示。
关系型数据库出了存储这些基本的数据信息外,还会存储表之间的关系。关系型数据会维护这些关系的完整性,一遍提供更加结构话的存储方式。
1.1.2 实体关系模型
数据库主要用来存储现实世界中的数据,关系型数据库通过使用表盒关系来存储数据,可以保存现实世界中的数据集合。实体关系模型对现实世界进行抽象,得出实体类型和实体间的关系,用来描述现实世界中数据的组成结构。在构建了实体关系后,一般会使用实体关系的图来清晰地表达出实体关系的机构。实体关系图(Entity Relationship Diagram)是指提供了表实体、属性和关系的图形化表示方式,用来描述现实世界的概念模型,简称为E-R图。
实体关系模型具有3个核心的元素,在进行数据库的分析和设计时,需要认真地理解这几个元素的具体含义及在E-R图汇总的表现形式,分别如下所示。
●实体(Entity):是具有相同特征和属性的显示世界事务的抽象,在E-R图汇总用矩形表示,矩形框内注明实体的名称。比如员工张三、员工赵七都是实体。
●属性(Attribute):是指实体具有的特征,一个实体可以包含若干个实体。在E-R图汇总属性用椭圆形表示,并使用线条将其与相应的实体连接起来。比如员工具有工号、入职日期等属性。
●关系(Relationship):是指实体之间的像话联系的方式,一般具有一对一关系(1:1)、一对多关系(1:N)、多对多关系(M:N)。
以认识管理系统的人员信息和员工请假为例,通过使用实体关系建模,回执了如图1.4所示的ER实体关系图。
由图1.4可以发现,人员和请假单这两个实体使用矩形表示,实体的属性使用椭圆形表示,实体与实体之间的关系使用另行表示。人员实体与请假单实体居勇1对多的关系,因此在另行附近使用1和N表示。
一般来说,数据库设计人员对数据库进行需求分析时,与数据库的用户进行沟通,数据库的设计人员可能需要回执多种不同类型的图来表单关系型数据库的存储结构,在逻辑设计阶段回执E-R关系图,可以使用Visio、PowerDesigner或者是ERWin Data Modeler等软件来实现。
1.1.3 关系型数据库管理系统RDBMS
数据库管理系统是基于关系型数据库模型创建的计算机软件程序,其英文全称是Relational Database Management System,简称RDBMS。数据库管理系统是位于操作系统和用户(或者是基于数据库的应用程序)之间的一组数据库管理程序,它提供了对数据库中的数据进行统一管理和控制的功能,对归根到底,数据库中的数据是以文件的形式存放在操作系统中的,数据库管理系统提供了数据库和高级组织形成,他提供了对数据库中的数据的统一管理和控制的功能,数据库管理系统与用户的示意图如图1.5所示。
数据库管理系统负责对数据库进行全方位的管理,他包含了如图1.6所示的几项职责。
如图1.6所示,一个数据库管理系统通常要提供如下所示的几项功能。
●定义数据库结构:DBMS提供数据定义语言来定义(DDL)数据库结构,用来搭建数据库框架,并被保存在数据字典中。
●存取数据库内容:DBMS提供数据操作语言(DML),实现对数据库数据的基本存取操作——检索、插入、修改和删除。
●数据库的运行管理:DBMS提供数据控制功能,即数据的安全性、完整性和并发控制等对数据库运行进行有效的控制和管理,以确保数据正确有效。
●数据库的建立和维护:包括数据库出事数据的装入,数据的转储、恢复、重组织,系统性能监视、分析等功能。
●数据库的传输:DBMS提供处理数据的传输,实现用户程序与DBMS之间的通信,通常与操作系统协调完成。
有了关系型数据库管理系统,开发人员就可以在数据库中创建数据库、创建表、存取数据库内容、对数据库进行备份和管理,只需要理解常用的系统相关的操作,而不用去研究关系型数据库系统内部深奥难懂的数学方方面的理论知识。
目前比较常见的DBMS有Oracle、SQL Server、Mysql、DB2等,它们都使用关系型数据库模型作为基础构建的软件,它们建立在关系数据模型的基础之上,通过一系列相关的表和其他数据库,对象把现实世界中存在的事务及事务之间的联系用数据库对象,比如表、视图、索引、关系加以存储,使之为数据库的用户提供规范化的信息。
1.1.4 使用SQL语言管理数据库
为了便于管理关系型数据库,数据库管理系统使用一种称为SQL的声明性语言。SQL的全称是结构化查询语言(Structured Query Language),是一种对关系数据库中的数据进行定义和操作的句法。他独立于数据库管理系统,并且以经被国际标准化组织指定为一种操作数据库的标准语言。SQL语言可以操作和管理数据库,各种数据库管理厂商使用SQL标准来定制自己的数据库管理方式,因此它对于所有的数据库管理系统来说是通用的。
●注意:由于不同的数据库厂商对SQL语言的支持与标准仍然存在着细微的不同,因此在使用时必须要参加各个数据库厂商提供的SQL操作文档。
SQL语言是一种高级的非过程化编程语言。SQL语言允许用户不了解数据库的底层结构和具体的操作方式,只需要在一个标准化的、较高层次的数据结构上进行工作,这就大大简化了数据库的操作方式,同时因为不与数据库、硬件等紧密耦合,因此也使得基于数据库的应用系统具有很好的可移值性。其操作示意如图1.7 所示。
由图中可以看到,任何客户端通过SQL语言来与数据库管理系统进行通信,通过向服务器端发送SQL语句,数据库管理系统将这些SQL语句转换为实际的对数据库数据进行操作的指令来对数据库进行管理,这简化了数据库管理系统的复杂程度,提高了用户对数据库的使用效率。
SQL语言主要又分为如下6大类。
(1)数据查询语言(DQL) :也称为“数据检索语句”,用于从表中获得数据,确定数据怎样在应用程序给出。关键字SELECT是DQL ( 也是所有SQL)用得最多的语句,其他DQL常用的关键字有WHERE、ORDER BY、GROUP BY和HAVING.这些DQL关键字常与其他类型的SQL语句一起使用。
(2)数据操作语言(DML) :分别用于添加、修改和删除表中的行。也称为动作查询语言。
(3)事务处理语言(TPL) :能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION、COMMIT和ROLLBACK.
(4)数据控制语言(DCL) :通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单各列的访问。
(5)数据定义语言(DDL):在数据库中创建新表或删除表(CREAT TABLE或DROP(5)数据定义语言(DDL):在数据库中创建新表或删除表(CREAT TABLE或DROP也是动作查询的一部分。
(6)指针控制语言(CCL) :用于对一个或多个表的单独行进行操作,比如DECLARECURSOR、FETCH INTO和UPDATE WHERE CURRENT等语句。
可以看到这些SQL语句基本上涵盖了进行数据库操作的方方面面,基本上学习数据库操作多数时间都是在使用SQL语句进行管理,因此对于一名合格的DBA来说,熟练地掌握SQL语言是非常有必要的。