精通数据库系列之入门-基础篇(1)

什么是数据库系统?

  是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言,实用程序以及数据库管理系统。数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这些数据为多个应用服务,独立于具体的应用程序。数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据库管理系统是一种系统软件,它的主要功能是维护数据库并有效地访问数据库中任意部分数据。对数据库的维护包括保持数据的完整性、一致性和安全性。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。数据库管理员一般是由业务水平较高、资历较深的人员担任。

  数据库系统的个体含义是指一个具体的数据库管理系统软件和用它建立起来的数据库;它的学科含义是指研究、开发、建立、维护和应用数据库系统所涉及的理论、方法、技术所构成的学科。在这一含义下,数据库系统是软件研究领域的一个重要分支,常称为数据库领域。

  数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。数据库系统的出现是计算机应用的一个里程碑,它使得计算机应用从以科学计算为主转向以数据处理为主,并从而使计算机得以在各行各业乃至家庭普遍使用。在它之前的文件系统虽然也能处理持久数据,但是文件系统不提供对任意部分数据的快速访问,而这对数据量不断增大的应用来说是至关重要的。为了实现对任意部分数据的快速访问,就要研究许多优化技术。这些优化技术往往很复杂,是普通用户难以实现的,所以就由系统软件(数据库管理系统)来完成,而提供给用户的是简单易用的数据库语言。由于对数据库的操作都由数据库管理系统完成,所以数据库就可以独立于具体的应用程序而存在,从而数据库又可以为多个用户所共享。因此,数据的独立性和共享性是数据库系统的重要特征。数据共享节省了大量人力物力,为数据库系统的广泛应用奠定了基础。数据库系统的出现使得普通用户能够方便地将日常数据存入计算机并在需要的时候快速访问它们,从而使的计算机走出科研机构进入各行各业、进入家庭。
数据库系统的产生和发展

  众所周知,数据库系统并不是在计算机产生的同时就出现的,而是随着计算机技术的不断发展,在特定的历史时期、特定的需求环境下出现的。人类在1946年发明了世界上的第一台计算机到20世纪60年代这漫长的20年里,计算机操作系统还主要局限于文件的操作,同样,对数据的管理也主要是通过文件系统来实现。进行计算所需要的各种数据存放在各自的文件里面。当要使用这些数据的时候,将文件打开,读取文件中的数据到内存中。当计算完毕后,将计算结果仍旧写入到文件中去。

  虽然这种在文件中存放数据的方式目前在很多系统中还在使用,但是,这样的数据存放方式在三四十年前的当时,就已经显示出了非常明显的不足。这些不足主要集中在无法对数据进行有效的统一管理。具体表现在这样几个方面:

程序员编写应用程序非常不方便。应用程序的设计者需要对程序所使用的文件的逻辑结构和物理结构都了解的非常清楚。而计算机操作系统只提供将文件打开、关闭、保存等非常低级的操作,而对数据的修改、查询操作则需要应用程序来解决,如果程序所需要的数据存放在不同的文件里,而且这些文件的存储格式又迥然不同。这样就给应用程序的开发带来了巨大的麻烦,程序员要为程序中所用到的每一个文件都写好相应的接口,而且不同的文件格式相差很大,这样就大大的增加了编程的工作量,从而使得在文件级别上开发应用程序的效率非常低下,严重影响应用软件的发展。


文件结构的每一处修改都将导致应用程序的修改,从而使得应用程序的维护工作量特别大。编过程序的人都有这种体会,就是每当自己开发完毕的程序需要修改的时候,又不得不将源程序重新修改、编译、链接。其麻烦程度可想而知。因为有人戏称编程人员为“老改”人员,个中滋味,外人恐怕很难体会到的。


计算机操作系统中的文件系统一般不支持对文件的并发访问。而在现代计算机系统中,为了充分发挥计算机系统的资源使用效率,一般都允许多个程序“同时”运行,即并发性。对数据库系统同样有并发性的要求,现在比较大型的数据库都有非常强的并发访问机制,这样可以充分利用数据库服务器的软、硬件资源,避免浪费。


由于基于文件系统的数据管理缺乏整体性、统一性,在数据的结构、编码、表示格式等诸多方面不能做到标准化、规范化,不同的操作系统有风格迥异的表示方式,因此在一定程度上造成了数据管理的混乱。另外,基于文件系统的数据管理在数据的安全性和保密性发面难以采取有效的措施,在一些对安全性要求比较高的场合,这种安全上的缺陷是完全不允许的。
  针对文件系统的这些重要缺点,人们逐步发展了以统一管理数据和共享数据为主要特征的系统,这就是数据库系统。数据库系统就是在这样的背景下发展起来了。1964年,美国通用电气公司开发成功了世界上的第一个数据库系统——IDS(Integrated Data Store)。IDS奠定了网状数据库的基础,并且得到了广泛的发行和应用,成为数据库系统发展史上的一座丰碑。1969年,美国国际商用机器公司(IBM)也推出世界上第一个层次数据库系统IMS(Information Management System),同样在数据库系统发展史上占有重要的地位。

  七十年代初,E.F.Codd在总结前面的层次、网状数据库优缺点的基础上,提出了关系数据模型的概念。他提出了关系代数和关系演算(直到今天,在E.F.Codd的这些基本理论还在左右这数据库系统的发展,也依然是高校计算机专业课堂上所要讲述的重要内容)。在整个七十年代,关系数据库系统无论从理论上还是实践上都去的了丰硕的成果。在理论上,确立了完整的关系模型理论、数据依赖理论和关系数据库的设计理论(在后面将重点讲述这些关系数据库的基本理论);在实践上,世界上出现了很多著名的关系数据库系统,比较著名的如System R,INGRES,Oracle等。

和文件系统相比,数据库系统有一系列的特点,具体表现在以下几个方面:

数据库系统向用户提供高级的接口。在文件系统中,用户要访问数据,必须了解文件的存储格式、记录的结构等。而在数据库系统中,这一切都不需要了。数据库系统为用户处理了这些具体的细节,向用户提供非过程化的数据库语言(即通常所说的SQL语言),用户只要提出需要什么数据,而不必关心如何获得这些数据。对数据的管理完全由数据库管理系统(DBMS: Database Management System)来实现。
 
查询的处理和优化。查询通常指用户向数据库系统提交的一些对数据操作的请求。由于数据库系统向用户提供了非过程化的数据操纵语言,因此对于用户的查询请求就由DBMS来完成,查询的优化处理就成了DBMS的重要任务。
 
并发控制。前面曾经提到,文件系统一般不支持并发操作,这样大大的限制了系统资源的有效利用。在数据库系统中,情况就不一样了。现代的数据库系统都有很强的并发操作机制,多个用户可以同时访问数据库,甚至可以同时访问同一个表中的不同记录。这样极大的提高了计算机系统资源的使用效率。
 
数据的完整性约束。凡是数据都要遵守一定的约束,最简单的一个例子就是数据类型,例如定义成整型的数据就不能是浮点数。由于数据库中的数据是持久的和共享的,因此对于使用这些数据的单位来说,数据的正确行显得非常重要。在关系数据库系统中,比较重要的完整性约束有实体完整性、域完整性、参照完整性和用户自定义的完整性等,在后面的文章中将有重点讲述。
  进入二十世纪八十年代之后,计算机硬件技术有了飞速的提高。计算机技术的提高促使计算机应用不断深入,产生了许多新的应用领域,例如计算机辅助设计、计算机辅助制造、计算机辅助教学、办公自动化、智能信息处理、决策支持等。这些新的领域对数据库系统提出了新的要求。但是由于应用的多元化,不能设计出一个统一的数据模型来表示这些新型的数据及其相互关系,因而出现了百家争鸣的局面,产生了演绎数据库、面向对象数据库、分布式数据库、工程数据库、时态数据库、模糊数据库等新型数据库的研究和应用。

  不过到目前为止,在世界范围内得到主流应用的还是经典的关系数据库系统,比较知名的如Sybase,Oracle,Informix,SQL Server,DB2等。在本系列专题文章中,我们也将根据数据库系统的实际应用情况,重点介绍关系数据库系统。其他的数据库系统,也将作简单的介绍。
行业的现状和展望

  近年来,我一直在和数据库管理员打交道,并直接面试了很多DBA职位。本文想概括一下IT行业对DBA的要求,以及国内DBA的新资现状。可以肯定地说,做一个高级DBA是很不错的职业。如果你打算成为一名DBA,那么希望本文起到抛砖引玉的作用。

什么是DBA

  数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。一个公司,不管它是自己开发应用软件,还是购买第三方的应用软件,只要涉及到数据库(有多少不涉及数据库的应用软件呢?数据库是商业的灵魂和大脑啊),就需要确定是否雇佣一个或几个DBA。知道DBA这个职位有哪些要求,对于企业内部这个职位的定义或者对于那些未来的DBA将是至关重要的。下面我列出了DBA的一些职责:

安装和升级数据库服务器(如Oracle、Microsoft SQL server),以及应用程序工具。
数据库设计系统存储方案,并制定未来的存储需求计划。
一旦开发人员设计了一个应用,就需要DBA来创建数据库存储结构(tablespaces)。
一旦开发人员设计了一个应用,就需要DBA来创建数据库对象(tables,views,indexes)。
根据开发人员的反馈信息,必要的时候,修改数据库的结构。
登记数据库的用户,维护数据库的安全性。
保证数据库的使用符合知识产权相关法规。
控制和监控用户对数据库的存取访问。
监控和优化数据库的性能。
制定数据库备份计划,灾难出现时对数据库信息进行恢复
维护适当介质上的存档或者备份数据
备份和恢复数据库
联系数据库系统的生产厂商,跟踪技术信息。
DBA的个性特点

  很多时候管理人员都忽视了DBA的个性特点,他们只关注DBA的技术能力。实际上,上面谈到的每个职责都意味着:DBA需要跟各种人员打交道,这些人员可能是销售商、用户、开发人员或者管理人员。这说明:DBA必须具有下面的个性特点:

自信心
好奇心
坚韧的意志力
老练
自我驱动
注意细节

为什么这些个性特点很重要呢?

  我就有几个缺乏自信心的部下,他们反复问我一些事无巨细的问题,他们没有信心哪怕做最小的决定。他们也缺乏工作的主动性。这对于初级DBA来说可能问题不太大,但对于那些高级DBA来说,如果他们缺乏自信心,他们又可以依赖谁帮他们决策呢?在DBA的面试中,即使你不能回答某个技术问题,你也要表现出足够的自信心。最致命的不是不知道问题的答案,而是不知道从哪儿得到答案。

  几乎所有的数据库系统都在不停地更新。但并不是所有的更新都有技术文档。对于好的DBA来说,好奇心是必需的。没有好奇心和求知欲的DBA总是等待有人告诉他们答案。而一个求知欲强的DBA将安装最新版本的数据库系统,并立即开始搜寻那些哪怕是细微的功能和性能上的差异和增强,从而改进自己的工作。应试时一个必然问及的问题是:你手头有哪些参考资料?你如何使用它们?毫无疑问,如果你只回答了数据库的文档,或者你甚至没有读过他们,你的"股票市值"将大大下降。好奇心会驱使DBA们理解数据字典(Data Dictionary)、管理工具(Tools)或者其他支持包(Packages)。

  DBA常常会碰到棘手的问题。寻找答案是一个需要坚韧意志力、可以经受摔打的个性特点。我常常在一些讨论组或者论坛上看到DBA们提出的问题,这些问题往往是提问者自己可以解决的,如果他们具有坚韧的个性特点,并努力寻求问题的答案。

  自我驱动对每个人都是很重要的,对DBA尤其如此。DBA要能想办法使问题出现,而不是等待问题的出现。自驱力强的DBA常常设法取得或者自己写一些必要的脚本(Script)来监控包括数据表大小(Table Size)、表空间使用(Tablespace Usage)等项目,这些项目如果被忽视,他们将遇到麻烦。应试的时候DBA们常常被问及在PL/SQL、SQL或者SQL*PLUS方面的经验,这些问题将把你从从来没有编写过自己需要的脚本的那些DBA们区分开。

  不用说和用户,就是和程序员和管理人员打交道,也需要你足够老练。一个一点不会处事的DBA不会为你做什么好事,只会在你的部门点燃敌对情绪的烈火。老练是这样一种能力,你劝告某个人到地府去,哈哈,最后这个人怀着渴望的心情去了。很多时候,开发者、管理者、用户,他们会提出毫无道理的需求,DBA们需要老练地引导、修正它们的要求,说服他们。在应试时,你的应对就很能说明你是否老练。
最后说说注意细节,这种性格倾向非常重要。注意细节的DBA们衣着整洁,有自己的日程安排,在应试前对应聘的单位做过调查。注意细节的DBA们深入了解数据库的内核,并能理解视图、表之间的关系。

DBA的等级

  DBA的等级并不是很严格的。按照对数据库的掌握情况,我简单地分成三个等级:初级Primary、中级Intermediate和高级Senior。

  初级DBA又称为DBBS,是英文Database Baby Sitter的缩写。初级DBA常常是兼职的,他们往往同时是程序员或者兼任其他的工作。初级DBA往往把个人简历写得很棒,参与了很多和数据库有关的项目或工作。但是,这些项目或者工作往往是:第三方软件供应商已经安装并配置了数据库,他们只做一些监控的工作。他们能处理一些简单的问题,但大多数时候他们向应用软件供应商求救。初级DBA更喜欢图形化的数据库管理或者监控工具,他们喜欢Access这样的桌面数据库简单易用,并把这些小型数据库的经验简单地应用到大型数据库相关的工作中。

  初级DBA是最好区分的。而中级DBA和高级DBA就不太好区分。他们的差别在于经验的不同和个性特点、能力方面的差异。中级DBA比较多,他们可以胜任高级DBA的大部分工作,包括:

数据库安装
数据库配置和管理
权限设置和安全管理
监控和性能调节
备份和恢复
解决一般的问题

  中级DBA往往从业一年左右,熟悉某种操作系统环境下的数据库。因为对中级DBA来讲,Windows NT和Unix是有很大差别的。中级DBA对SQL比较熟悉,他们自己购买了几本数据库方面的书籍,并深入钻研。中级DBA往往同时兼任数据库程序员,他们的工作对性能、稳定性、安全性的追求基本上不是很高,往往配合高级DBA做一些例行工作。

  高级DBA在国内是非常少的。他们购买了太多的数据库方面的英文资料,也许是托朋友从Amazon买的。相对于他们的报酬来讲,买书的钱是很少的一个比例。高级DBA一般都熟悉很多种操作平台下的几种大型数据库。他们知道各种不同数据库在不同环境下的优势和劣势,并能在数据库平台和数据库环境的选择方面做出决策。他们一般通晓系统架构和数据库设计,并能对数据库进行各种级别的优化。高级DBA一般都配有助手,他们更偏向做决策和计划。高级DBA往往在银行业、保险业、在线交易等对稳定性、安全性、性能都要求比较高的关键业务处理领域大显身手。

  很多时候,是否取得数据库专家认证证书并不是很重要。我知道很多数据库厂商的培训只要你去了都会获得证书。有很多的公司提供商业化的培训,他们的服务质量也有好有劣。所以证书并不是特别地有意义。


 
已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页