资料库
在计算中,数据库是基于数据库管理系统( DBMS )的有组织的数据集或一种数据存储的集合,该软件与最终用户,应用程序和数据库本身进行交互的软件以捕获和分析数据。 DBMS还涵盖了为管理数据库提供的核心设施。数据库,DBM和关联应用程序的总和可以称为数据库系统。通常,术语“数据库”也被宽松地用于参考任何DBMS,数据库系统或与数据库关联的应用程序。
小型数据库可以存储在文件系统上,而大数据库则托管在计算机簇或云存储上。数据库的设计涵盖了正式技术和实际考虑因素,包括数据建模,有效的数据表示和存储,查询语言,敏感数据的安全性和隐私性以及分布式计算问题,包括支持并发访问和容忍度。
计算机科学家可以根据其支持的数据库模型对数据库管理系统进行分类。关系数据库在1980年代占主导地位。这些模型数据是一系列表中的行和列,并且绝大多数使用SQL来编写和查询数据。在2000年代,非关系数据库变得流行,共同称为NOSQL ,因为它们使用了不同的查询语言。
术语和概述
正式地,“数据库”是指通过使用“数据库管理系统”(DBMS)访问的一组相关数据,该数据是一组集成的计算机软件集,允许用户与一个或多个数据库进行交互,并提供访问对的访问数据库中包含的所有数据(尽管可能存在限制访问特定数据的限制)。 DBM提供了各种功能,可输入,存储和检索大量信息,并提供管理如何组织该信息的方法。
由于它们之间的密切关系,“数据库”一词通常被随意地用于指代操作它的数据库和DBM。
在专业信息技术领域之外,数据库通常用于参考任何相关数据集合(例如电子表格或卡索引),因为大小和使用要求通常需要使用数据库管理系统。
现有的DBMS提供了各种功能,允许管理数据库及其数据,这些功能可以分为四个主要函数组:
- 数据定义- 定义数据组织的定义的创建,修改和删除。
- 更新- 实际数据的插入,修改和删除。
- 检索- 以直接可用的形式提供信息或其他应用程序的进一步处理。检索到的数据可以以基本相同的形式提供与数据库中存储的形式,也可以通过更改或组合数据库中的现有数据获得的新形式。
- 管理- 注册和监视用户,执行数据安全性,监视性能,维护数据完整性,处理并发控制以及恢复因某些事件(例如意外系统故障)损坏的信息。
数据库及其DBM都符合特定数据库模型的原理。 “数据库系统”集体指的是数据库模型,数据库管理系统和数据库。
从物理上讲,数据库服务器是持有实际数据库并仅运行DBMS和相关软件的专用计算机。数据库服务器通常是多处理器计算机,具有宽敞的内存和RAID磁盘阵列用于稳定存储。硬件数据库加速器通过高速通道连接到一个或多个服务器,也用于大容量交易处理环境中。 DBMS是大多数数据库应用程序的核心。 DBMS可以围绕具有内置网络支持的自定义多任务内核构建,但是现代DBMS通常依靠标准操作系统来提供这些功能。
由于DBMS构成了一个重要的市场,因此计算机和存储供应商经常在其自己的开发计划中考虑DBMS的要求。
数据库和DBMS可以根据支持的数据库模型(例如关系或XML ),他们运行的计算机的类型(从服务器群集到手机),查询语言(查询语言)(例如,与XML)进行分类(例如,关系或XML )(s)(s) S)用于访问数据库(例如SQL或XQUERY )及其内部工程,这会影响性能,可伸缩性,弹性和安全性。
历史
数据库及其各自的DBMS的尺寸,功能和性能已在数量级增长。这些性能提高是通过处理器,计算机存储器,计算机存储和计算机网络领域的技术进步来实现的。通过直接访问存储媒体(例如磁盘)的出现,数据库的概念成为可能,该磁盘在1960年代中期广泛使用。较早的系统依赖于磁带上数据的顺序存储。随后的数据库技术的开发可以基于数据模型或结构分为三个时代:导航,SQL/关系和统一后。
两个主要的早期导航数据模型是分层模型和Codasyl模型(网络模型)。这些特征在于使用指针(通常是物理磁盘地址)跟随从一个记录到另一个记录的关系。
这种关系模型是由Edgar F. Codd于1970年提出的,他坚持认为应用程序应通过内容搜索数据,而不是通过以下链接来搜索数据。关系模型采用一组分类帐式的表,每个表用于不同类型的实体。仅在1980年代中期,计算硬件才变得足够强大,以允许广泛的关系系统(DBMSS Plus应用程序)的广泛部署。但是,到1990年代初期,关系系统以所有大规模数据处理应用程序为主,截至2018年,它们仍然占主导地位: IBM DB2 , Oracle , MySQL和Microsoft SQL Server是搜索最多的DBMS 。主要数据库语言是关系模型的标准化SQL,它影响了其他数据模型的数据库语言。
对像数据库是在1980年代开发的,目的是克服对象 - 相关阻抗不匹配的不便,这导致了术语“相关后”术语,也导致了混合对象 - 相关数据库的发展。
2000年代后期的下一代关系后数据库被称为NOSQL数据库,引入了快速密钥值商店和面向文档的数据库。一个称为NewsQL数据库的竞争“下一代”尝试了新的实现,这些实现保留了关系/SQL模型,同时旨在与市售的关系DBMS相比,旨在与NOSQL的高性能相匹配。
术语数据库的引入与1960年代中期以前的直接访问存储(磁盘和鼓)的可用性相吻合。该术语与过去的基于磁带的系统形成了对比,允许共享的交互式使用而不是每日批处理处理。 《牛津英语词典》引用了加利福尼亚系统开发公司1962年的一份报告,是第一个在特定技术意义上使用“数据库”一词的报告。
随着计算机的速度和能力的增长,出现了许多通用数据库系统。到1960年代中期,许多这样的系统已经进入了商业用途。对标准的兴趣开始增长,其中一种产品的综合数据存储(IDS)的作者查尔斯·巴赫曼(Charles Bachman )在codasyl中建立了数据库任务组,该组负责Cobol的创建和标准化。 1971年,数据库任务组提供了其标准,该标准通常被称为Codasyl方法,很快基于此方法的许多商业产品进入了市场。
CODASYL方法为应用程序提供了围绕链接的数据集导航到大型网络中的能力。应用程序可以通过三种方法之一找到记录:
- 使用主键(称为CALC键,通常由哈希实现)
- 从一个记录到另一个记录,导航关系(称为集合)
- 按顺序扫描所有记录
后来的系统添加了B树以提供替代访问路径。许多codasyl数据库还为最终用户添加了声明性查询语言(与导航API不同)。但是,Codasyl数据库很复杂,需要进行大量培训和努力以生成有用的应用。
IBM在1966年也拥有自己的DBM,称为信息管理系统(IMS)。 IMS是系统/360上为阿波罗计划编写的软件的开发。 IMS在概念上通常与Codasyl相似,但使用了严格的层次结构,用于其数据导航模型,而不是Codasyl的网络模型。由于访问了数据的方式,这两个概念后来被称为导航数据库:该术语由Bachman的1973年Turing Award演示文稿推广为程序员作为Navigator 。 IBM将IMS分类为层次数据库。 IDM和CINCOM系统的总数据库被归类为网络数据库。截至2014年,IMS仍在使用。
1970年代,关系DBMS
埃德加·F·科德(Edgar F. Codd)在加利福尼亚州圣何塞的IBM工作,在他们的一个分支办公室中,主要参与了硬盘系统的开发。他对Codasyl方法的导航模型不满意,尤其是缺乏“搜索”设施。 1970年,他撰写了许多论文,概述了一种新的数据库构建方法,最终最终导致了开创性的大型共享数据库的数据关系模型。
在本文中,他描述了一种用于存储和使用大型数据库的新系统。 Codd的想法不是像Codasyl一样存储在某种链接的自由形式记录的链接列表中,而是将数据组织为许多“表”,而是用于不同类型的实体。每个表包含包含实体属性的固定列数。每个表的一个或多个列被指定为可以唯一标识表的行的主要钥匙。表之间的交叉引用始终使用这些主要键,而不是磁盘地址,并且查询将基于这些键关系加入表,使用基于关系计算的数学系统(模型以其名称为单位)的数学系统。将数据分配到一组归一化表(或关系)中,旨在确保每个“事实”仅存储一次,从而简化更新操作。称为视图的虚拟表可以为不同的用户以不同的方式呈现数据,但是视图无法直接更新。
CODD使用数学术语来定义模型:关系,元组和域而不是表,行和列。现在熟悉的术语来自早期实施。后来,CODD会批评实际实施的趋势偏离该模型所基于的数学基础。
使用主要密钥(以用户为导向的标识符)代表跨表可行关系而不是磁盘地址,具有两个主要动机。从工程的角度来看,它使表可以重新定位和调整,而无需昂贵的数据库重组。但是,CODD对语义差异更感兴趣:使用显式标识符使使用干净的数学定义定义更新操作变得更加容易,并且还可以根据一阶谓词计算的确定学科来定义问题的查询操作;由于这些操作具有干净的数学属性,因此可以以可证明的正确方式重写查询,这是查询优化的基础。与层次结构或网络模型相比,尽管表之间的连接不再是明确的,但与层次结构或网络模型相比没有丧失的表现力。
在层次结构和网络模型中,允许记录具有复杂的内部结构。例如,员工的薪水历史可以表示为员工记录中的“重复小组”。在关系模型中,归一化的过程导致这种内部结构被仅由逻辑密钥连接的多个表中的数据替换。
例如,数据库系统的常见用途是跟踪有关用户,其姓名,登录信息,各种地址和电话号码的信息。在导航方法中,所有这些数据都将放置在单个可变长度记录中。在关系方法中,数据将被标准化到用户表,地址表和电话号码表中(例如)。仅当实际提供地址或电话号码时,才能在这些可选表中创建记录。
除了使用逻辑标识符而不是磁盘地址识别行/记录外,CODD更改了应用程序从多个记录组装数据的方式。他们不是要求应用程序一次通过浏览链接一次收集数据记录,而是使用声明的查询语言来表达所需的数据,而不是应找到其访问路径。找到对数据的有效访问路径成为数据库管理系统的责任,而不是应用程序程序员。此过程称为查询优化,取决于查询是根据数学逻辑表达的事实。
伯克利,尤金·王(Eugene Wong)和迈克尔·斯通布拉克(Michael Stonebraker)的两个人收集了科德的论文。他们使用已经为地理数据库项目和学生程序员制作代码的资金启动了一个名为Ingres的项目。从1973年开始,Ingres提供了第一个在1979年广泛使用的测试产品。INGRES以多种方式与System R相似,包括使用“语言”用于数据访问,称为Quel 。随着时间的流逝,Ingres搬到了新兴的SQL标准。
IBM本身对关系模型, PRTV和生产的Business System 12进行了一个测试实现,现在都停产了。霍尼韦尔(Honeywell)为Multics撰写了MRD ,现在有两个新的实现: Alphora Dataphor和Rel 。通常称为关系的大多数其他DBMS实现实际上是SQL DBMS。
1970年,密歇根大学开始基于DL Childs的设定理论数据模型开发微信息管理系统。 Micro被美国劳工部,美国环境保护署以及艾伯塔大学,密歇根大学和韦恩州立大学的研究人员用于管理非常大的数据集。它使用密歇根州终端系统在IBM大型机计算机上运行。直到1998年,该系统一直在生产中。
综合方法
在1970年代和1980年代,尝试建立具有集成硬件和软件的数据库系统。基本的理念是,这种整合将以较低的成本提供更高的性能。示例是IBM System/38 , Teradata的早期产品和Britton Lee,Inc。数据库机器。
用于数据库管理的硬件支持的另一种方法是ICL的CAFS Accelerator,这是具有可编程搜索功能的硬件磁盘控制器。从长远来看,这些努力通常是不成功的,因为专业的数据库机器无法跟上通用计算机的快速发展和进步。因此,如今,大多数数据库系统是使用通用计算机数据存储在通用硬件上运行的软件系统。但是,某些公司在某些应用程序中仍在诸如Netezza和Oracle( Exadata )等某些公司中提出了这个想法。
1970年代后期,SQL DBMS
IBM开始根据1970年代初的系统R的概念而宽松地制定原型系统。第一个版本已在1974/5年就可以了,然后开始使用多桌系统,可以将数据分开,以便所有记录的数据(其中一些是可选的)不必存储在单个大“块”。随后的多用户版本由客户在1978年和1979年进行了测试,此时已经添加了标准化的查询语言-SQL。 Codd的想法使自己确立了自己的可行且优于Codasyl,推动IBM开发系统R的真实生产版本,称为SQL/DS ,后来又开发了数据库2 ( IBM DB2 )。
Larry Ellison的Oracle数据库(或更简单的Oracle )是根据IBM在System R上的论文开始的。尽管Oracle V1实施是在1978年完成的,直到Oracle 2版Ellison版本2时,Ellison Beat Ibm beat Ibm te ibm to in Ibm of Market in in Market in 1979年。
Stonebraker继续应用Ingres的课程,以开发一个新的数据库Postgres,该数据库现在被称为PostgreSQL 。 PostgreSQL通常用于全球关键任务应用程序(.org和.info域名注册表将其用作其主要数据存储,许多大型公司和金融机构也是如此)。
在瑞典,还阅读了科德的论文,并于1970年代中期在乌普萨拉大学(Uppsala University)开发了Mimer SQL 。 1984年,该项目合并为独立企业。
另一个数据模型,实体与关联模型,于1976年出现,并在数据库设计中广受欢迎,因为它强调了比早期的关系模型更熟悉的描述。后来,将实体与关联构建体改造为关系模型的数据建模构建体,两者之间的差异已变得无关紧要。
1980年代,在桌面上
1980年代迎来了台式计算时代。新计算机通过Lotus 1-2-3和DBase等数据库软件(例如Lotus 1-2-3)赋予了用户能力。 DBase产品轻巧且容易让任何计算机用户开箱即用。 DBASE的创建者C. Wayne Ratliff表示:“ DBase与基本,C,Fortran和Cobol之类的程序不同,因为已经完成了许多肮脏的工作。数据操作是由DBase完成的,而不是由DBase完成。用户,用户可以专注于他的工作,而不必弄乱打开,阅读和关闭文件的肮脏细节以及管理空间分配。” DBASE是1980年代和1990年代初期销量最高的软件头衔之一。
1990年代,面向对象
1990年代,随着面向对象的编程的增加,如何处理各种数据库中的数据的增长。程序员和设计师开始将数据库中的数据视为对象。也就是说,如果一个人的数据在数据库中,那么现在认为该人的地址,电话号码和年龄等人的属性属于该人而不是无关紧要的数据。这允许数据之间的关系与对象及其属性相关,而不是与各个字段有关。术语“对象 - 相关阻抗不匹配”描述了在编程对象和数据库表之间翻译的不便。对像数据库和对象 - 相关数据库试图通过提供面向对象的语言(有时为SQL扩展)来解决此问题,该语言可以用作纯粹关系SQL的替代方案。在编程方面,称为对象 - 相关映射(ORM)的库试图解决相同的问题。
2000年代NOSQL和NewsQL
XML数据库是一种结构化的面向文档的数据库,该数据库允许基于XML文档属性查询。 XML数据库主要用于方便地将数据视为文档集合的应用程序中,其结构可以从非常灵活到高度僵化的情况下:示例包括科学文章,专利,纳税文件和人员记录。
NOSQL数据库通常非常快,不需要固定的表模式,避免通过存储不规范的数据来避免加入操作,并旨在水平扩展。
近年来,对具有较高分区耐受性的大规模分布数据库的需求很大,但是根据CAP定理,分布式系统不可能同时提供一致性,可用性和分区耐受性保证。分布式系统可以同时满足这些保证中的任何两个,但不是所有三个保证。因此,许多NOSQL数据库都使用所谓的最终一致性来提供可用性和分区公差保证,并降低数据一致性。
NewsQL是一类现代关系数据库,旨在为在线交易处理(Read-Write)工作负载提供相同的NOSQL系统的可扩展性能,同时仍使用SQL并维护传统数据库系统的酸保证。
用例
数据库用于支持组织的内部操作,并支持与客户和供应商的在线互动(请参阅企业软件)。
数据库用于持有管理信息和更专业的数据,例如工程数据或经济模型。示例包括计算机化图书馆系统,飞行预订系统,计算机零件库存系统以及许多内容管理系统,这些系统将网站存储为数据库中的网页集合。
分类
对数据库进行分类的一种方法涉及其内容的类型,例如:书目,文档文本,统计或多媒体对象。另一种方法是通过其应用领域,例如:会计,音乐作品,电影,银行,制造或保险。第三种方法是在某些技术方面,例如数据库结构或接口类型。本节列出了用于表征不同类型数据库的一些形容词。
- 内存数据库是一个主要位于主内存中的数据库,但通常由非挥发计算机数据存储备份。主内存数据库比磁盘数据库快,因此通常在响应时间至关重要的地方使用,例如在电信网络设备中。
- 活动数据库包括事件驱动的体系结构,该体系结构可以响应数据库内部和外部的条件。可能的用途包括安全监控,警报,统计数据收集和授权。许多数据库以数据库触发器的形式提供活动的数据库功能。
- 云数据库依赖云技术。数据库及其大多数DBM都远程居住在“云中”,而其应用程序都是由程序员开发的,后来由最终用户通过Web浏览器和Open API进行了维护和使用。
- 数据仓库从操作数据库中以及来自市场研究公司等外部来源的归档数据。仓库成为管理人员和其他最终用户使用的数据中心来源,他们可能无法访问操作数据。例如,销售数据可能会汇总到每周总计,并从内部产品代码转换为使用UPC ,以便可以将其与Acnielsen数据进行比较。数据仓库的一些基本和基本组成部分包括提取,分析和采矿数据,转换,加载和管理数据,以便它们可以进一步使用。
- 演绎数据库将逻辑编程与关系数据库相结合。
- 分布式数据库是一个数据库,其中数据和DBM跨越了多台计算机。
- 面向文档的数据库旨在存储,检索和管理以文档为导向或半结构化信息。面向文档的数据库是NOSQL数据库的主要类别之一。
- 嵌入式数据库系统是DBMS,它与应用程序软件紧密集成,该软件需要以使DBMS隐藏在应用程序的最终用户中,并且几乎不需要持续的维护。
- 最终用户数据库由单个最终用户开发的数据组成。这些示例是文档,电子表格,演示文稿,多媒体和其他文件的集合。存在几种产品来支持此类数据库。
- 联合数据库系统包括几个不同的数据库,每个数据库都有自己的DBM。它由联合数据库管理系统(FDBMS)作为单个数据库处理,该系统透明地集成了多个自主dbms,可能是不同类型的(在这种情况下,它也将是一个异类数据库系统),并为他们提供了集成的概念视图。
- 有时,术语多数据库用作联合数据库的同义词,尽管它可能是指较少集成的数据库(例如,没有FDBMS和托管集成模式)组的数据库,该组在单个应用程序中合作。在这种情况下,通常使用中间件进行分发,通常包括原子提交协议(ACP),例如,两阶段提交协议,以允许整个参与数据库的分布式(全局)交易。
- 图形数据库是一种NOSQL数据库,它使用带有节点,边缘和属性的图形结构来表示和存储信息。可以存储任何图形的一般图形数据库与专用图形数据库(例如Triplestores和网络数据库)不同。
- 阵列DBMS是一种NOSQL DBM,允许(通常大)多维阵列(例如卫星图像和气候模拟输出)进行建模,存储和检索。
- 在超文本或超媒体数据库中,可以将代表对象的任何单词或文本代表对象,另一个文本,文章,图片或电影都可以超链接到该对象。超文本数据库对于组织大量不同信息特别有用。例如,它们对于组织在线百科全书很有用,用户可以方便地跳过文本。因此,万维网是一个大型分布式超文本数据库。
- 知识库(缩写KB , KB或δ)是一种用于知识管理的特殊数据库,为计算机收集,组织和知识的检索提供了手段。还有代表其解决方案和相关经验问题的数据集合。
- 手机数据库可以从移动计算设备进行或同步。
- 操作数据库存储有关组织运营的详细数据。他们通常使用交易处理相对较高的更新量。示例包括记录有关企业客户的联系,信用和人口统计信息的客户数据库,持有信息,福利,福利,有关员工的技能数据,企业资源计划系统,记录有关产品组件,零件库存和财务详细信息的人事数据库跟踪组织的资金,会计和财务交易的数据库。
- 并行数据库试图通过并行化加载数据,构建索引和评估查询等任务来提高性能。
- 概率数据库采用模糊逻辑来从不精确的数据中得出推论。
- 实时数据库处理交易足够快,以至于结果可以立即返回并立即采取行动。
- 空间数据库可以用多维功能存储数据。此类数据的查询包括基于位置的查询,例如“我所在地区最接近的酒店在哪里?”。
- 时间数据库具有内置的时间方面,例如时间数据模型和SQL的时间版本。更具体地说,时间方面通常包括有效时间和交易时间。
- 面向术语的数据库构建在面向对象的数据库上,通常是针对特定字段定制的。
- 一个非结构化的数据数据库旨在以一种可管理和受保护的方式存储,这些对像在常见数据库中不适合自然和方便。它可能包括电子邮件,文档,期刊,多媒体对像等。该名称可能具有误导性,因为某些对象可以高度结构化。但是,整个可能的对象集合不适合预定义的结构化框架。现在,大多数已建立的DBMS都以各种方式支持非结构化数据,并且新的专用DBMS正在出现。
数据库管理系统
Connolly和Begg将数据库管理系统(DBMS)定义为“使用户能够定义,创建,维护和控制对数据库的访问权限的软件系统”。 DBMS的示例包括MySQL , MariadB , PostgreSQL , Microsoft SQL Server , Oracle Database和Microsoft Access 。
有时会扩展DBMS首字母缩写词以指示基础数据库模型,并具有用于对象(方向)的关系,OODBMS的RDBMS和对象 - 相关模型的ORDBMS。其他扩展可以指示其他一些特征,例如分布式数据库管理系统的DDBM。
DBM提供的功能可能会发生巨大变化。核心功能是数据的存储,检索和更新。 CODD提出了以下功能和服务,成熟的通用DBMS应提供:
- 数据存储,检索和更新
- 用户可访问的目录或数据字典描述元数据
- 对交易和并发的支持
- 恢复数据库的设施应损坏
- 支持授权和更新数据
- 远程位置的访问支持
- 执行约束以确保数据库中的数据遵守某些规则
通常也可以预期,DBM将出于有效管理数据库的必要目的提供一组实用程序,包括进口,导出,监视,裂变和分析实用程序。 DBMS的核心部分在数据库和应用程序接口之间相互作用,有时称为数据库引擎。
通常,DBMS会具有可以静态和动态调整的配置参数,例如数据库可以使用的服务器上的最大内存量。趋势是最大程度地减少手动配置的量,对于嵌入式数据库等案例,目标零管理的需求至关重要。
大型的主要企业DBMS倾向于增加规模和功能,并在一生中涉及多达数千个人类的发展努力。
早期的多用户DBM通常仅允许应用程序驻留在同一台计算机上,并通过终端或终端仿真软件访问。客户端 - 服务器体系结构是一个开发,该应用程序驻留在客户端桌面上,并且在服务器上的数据库允许分发处理。这将演变成一个多端机体系结构,该体系结构将应用程序服务器和Web服务器与最终用户界面通过Web浏览器与数据库直接直接连接到相邻层。
通用DBMS将提供公共应用程序编程接口(API),并可选地提供数据库语言(例如SQL)的处理器,以允许将应用程序写入与数据库进行交互并操纵数据库。特殊用途DBM可以使用私有API,并专门定制并链接到单个应用程序。例如,电子邮件系统执行通用DBM的许多功能,例如消息插入,消息删除,附件处理,块列表,将消息关联到电子邮件地址等等,但是这些功能仅限于处理所需的功能电子邮件。
应用
与数据库的外部互动将通过与DBMS相互接口的应用程序。这可以从允许用户在文本或图形上执行SQL查询的数据库工具到恰好使用数据库存储和搜索信息的网站。
应用程序程序接口
程序员将通过应用程序程序界面(API)或数据库语言编码到数据库(有时称为数据源)。 DBM可能需要通过预处理器或桥接API间接支持所选的特定API或语言。某些API的目标是独立于数据库, ODBC是一个众所周知的示例。其他常见的API包括JDBC和ADO.NET 。
数据库语言
数据库语言是专用语言,允许以下任务中的一个或多个,有时以sublanguages区分:
- 数据控制语言(DCL) - 控制对数据的访问;
- 数据定义语言(DDL) - 定义数据类型,例如创建,更改或删除表及其之间的关系;
- 数据操作语言(DML) - 执行诸如插入,更新或删除数据出现之类的任务;
- 数据查询语言(DQL) - 允许搜索信息和计算派生信息。
数据库语言是特定于特定数据模型的。著名的例子包括:
- SQL用单一语言结合了数据定义,数据操作和查询的角色。它是关系模型的首批商业语言之一,尽管它在某些方面与CODD所述的关系模型不同(例如,可以订购表的行和列)。 SQL于1986年成为美国国家标准研究所(ANSI)的标准,并于1987年成为国际标准化组织(ISO)。自那以来,标准已定期提高,并得到所有主流商业的支持(具有不同程度的一致性)关系DBMS。
- OQL是对像模型语言标准(来自对像数据管理组)。它影响了一些较新的查询语言的设计,例如JDOQL和EJB QL 。
- XQUERY是由XML数据库系统(例如MarkLogic )实现的标准XML查询语言,并且通过具有XML功能(例如Oracle和DB2)的关系数据库,以及Memory XML处理器(例如Saxon )。
- SQL/XML将Xquery与SQL结合在一起。
数据库语言还可以包含以下功能:
- DBMS特定的配置和存储引擎管理
- 计算查询结果,例如计数,总和,平均,排序,分组和交叉引用
- 约束执法(例如在汽车数据库中,只允许每辆车一种引擎类型)
- 应用程序编程界面版本的查询语言,用于程序员便利
贮存
数据库存储是数据库物理物质化的容器。它包括数据库体系结构中的内部(物理)级别。它还包含所需的所有信息(例如,元数据,“有关数据的数据”以及内部数据结构),以在需要时重建概念级别和外部级别。数据库作为数字对象包含必须存储的三层信息:数据,结构和语义。需要正确存储所有三层,以使数据库的将来保存和寿命。将数据放入永久存储中通常是数据库引擎又称“存储引擎”的责任。尽管通常由DBMS通过基础操作系统访问(通常使用操作系统的文件系统作为存储布局中间体),但存储属性和配置设置对于DBMS的有效操作非常重要,因此由数据库管理员。 DBMS在运行时,其数据库始终位于几种类型的存储中(例如,内存和外部存储)。数据库数据和其他所需信息(可能大量)被编码为位。数据通常位于结构中的存储中,这些结构看起来与数据看概念和外部级别的方式完全不同,但是以尝试优化(最好的)在用户和程序需要时重建这些级别的重建的方式至于从数据中计算其他类型的所需信息(例如,在查询数据库时)。
一些DBMS支持指定使用哪种字符编码来存储数据,因此可以在同一数据库中使用多个编码。
存储引擎使用各种低级数据库存储结构来序列化数据模型,以便将其写入首选介质。诸如索引之类的技术可用于提高性能。常规存储是针对行的,但是也有面向列的和相关数据库。
物有意见
通常使用存储冗余来提高性能。一个常见的例子是存储实质性的视图,该视图由经常需要的外部视图或查询结果组成。每次需要时,存储这种视图都可以节省昂贵的计算。实现视图的弊端是在更新它们时产生的高架,以使其与原始更新的数据库数据和存储冗余成本保持同步。
复制
有时,数据库通过数据库对象复制(带有一个或多个副本)采用存储冗余,以提高数据可用性(既可以提高同时多个最终用户访问对同一数据库对象的性能的性能,又在部分失败的情况下提供弹性分布式数据库)。需要在对象副本上同步复制对象的更新。在许多情况下,整个数据库被复制。
虚拟化
通过数据虚拟化,使用的数据保留在其原始位置,并建立了实时访问,以允许多个来源的分析。这可以有助于解决一些技术困难,例如在组合来自各个平台的数据时降低数据错误的错误风险,并确保使用最新数据。此外,避免创建包含个人信息的新数据库可以使遵守隐私法规变得更容易。但是,通过数据虚拟化,与所有必要数据源的连接必须是运行的,因为数据的本地副本是该方法的主要缺点之一。
安全
数据库安全涉及保护数据库内容,其所有者和用户的所有各个方面。从故意未经授权的数据库使用到未经授权的实体(例如,一个人或计算机程序)的无意数据库访问,它的保护范围从无意的数据库访问中。
数据库访问控制与控制谁(一个人或某个计算机程序)可以访问数据库中的信息。该信息可能包含特定数据库对象(例如,记录类型,特定记录,数据结构),某些对象(例如,查询类型或特定查询)或使用特定访问路径(例如,使用特定索引,或其他数据结构以访问资讯).数据库访问控件由使用专用保护的安全DBMS接口的特殊授权(数据库所有者)人员设置。
可以通过个人和(在最精致的模型中)将个人和特权分配给个人和特权,或通过将个人和群体分配给角色,然后将其分配给群体,或者(在最精致的模型中)直接管理这一问题,然后将其分配给群体。数据安全性可防止未经授权的用户查看或更新数据库。使用密码,允许用户访问整个数据库或称为“ subschemas”的子集。例如,员工数据库可以包含有关单个员工的所有数据,但是可以授权一组用户查看薪资数据,而其他用户仅允许仅访问工作历史记录和医疗数据。如果DBMS提供了一种交互式输入和更新数据库的方法以及询问它,则此功能允许管理个人数据库。
一般的数据安全性涉及保护特定数据块,无论是在物理上(即腐败,破坏或删除),例如,请参阅物理安全性),或者对它们的解释,或它们的一部分对有意义的信息(例如,通过查看它们构成的一连串的串,结论特定的有效信用卡号码;例如,请参见数据加密)。
更改和访问记录记录谁访问了哪些属性,更改的内容以及何时更改。记录服务允许以后通过记录访问事件和更改来进行法医数据库审核。有时,应用程序级代码用于记录更改,而不是将其留在数据库中。可以设置监视以试图检测安全漏洞。因此,由于其提供的许多好处,组织必须认真对待数据库安全性。组织将受到安全违规和黑客攻击活动的保护,例如防火墙入侵,病毒传播和赎金。这有助于保护公司的基本信息,这在任何原因都无法与局外人共享。
交易和并发
数据库交易可用于从崩溃中恢复后引入一定程度的容错和数据完整性。数据库事务是一个工作单位,通常封装了数据库上的许多操作(例如,读取数据库对象,写作,获取或释放锁定等),数据库和其他系统中支持的抽象。在该事务中包括哪些程序/代码执行(由交易程序员通过特殊事务命令确定)。
首字母缩写酸描述了数据库交易的一些理想特性:原子能,一致性,隔离和耐用性。
移民
一个用一个DBM构建的数据库无法移植到另一个DBMS(即其他DBMS无法运行它)。但是,在某些情况下,希望将数据库从一个DBM迁移到另一个DBM。原因主要是经济的(不同的DBMS可能具有不同的总成本或TCO的总成本),功能和运营(不同的DBMS可能具有不同的功能)。迁移涉及数据库从一个DBMS类型到另一种DBMS的转换。转换应保持(如果可能的话)与数据库相关的应用程序(即,所有相关的应用程序)完整。因此,数据库的概念和外部体系结构级别应保持在转换中。可能需要维持体系结构内部层面的某些方面。复杂或大的数据库迁移本身可能是一个复杂且昂贵的(一次性)项目,应该将其纳入迁移的决定中。尽管可能存在工具来帮助特定DBMS之间的迁移。通常,DBMS供应商提供工具来帮助其他流行的DBMS导入数据库。
建造,维护和调整
在为应用程序设计数据库后,下一个阶段是构建数据库。通常,可以选择适当的通用dbms来用于此目的。 DBMS提供了数据库管理员使用的所需用户界面来定义DBMS各自的数据模型中所需的应用程序数据结构。其他用户界面用于选择所需的DBMS参数(例如与安全相关,存储分配参数等)。
当数据库准备就绪时(所有数据结构和其他所需的组件均已定义),通常会在初始应用程序的数据(数据库初始化,通常是一个独特的项目中;使其运行。在某些情况下,数据库在没有应用程序数据的过程中开始运行,并且数据在其操作过程中累积。
创建数据库,初始化和填充后需要维护它。各种数据库参数可能需要更改,并且可能需要对数据库进行调整(调整)以获得更好的性能;应用程序的数据结构可以更改或添加,可以编写新的相关应用程序程序以添加应用程序的功能等。
备份还原
有时,希望将数据库带回以前的状态(例如,由于软件错误而发现数据库损坏的情况,或者是否已使用错误的数据进行了更新)。为此,偶尔或连续进行备份操作,其中每个所需的数据库状态(即,其数据的值及其嵌入数据库数据结构)都保存在专用的备份文件中(有效地有许多技术可以有效地执行此操作)。当数据库管理员决定将数据库带回此状态时(例如,通过数据库处于此状态的期望点来指定此状态),这些文件用于还原该状态。
静态分析
用于软件验证的静态分析技术也可以在查询语言的情况下应用。特别是, *抽象解释框架已扩展到关系数据库的查询语言字段,以支持声音近似技术。查询语言的语义可以根据数据的混凝土域的适当抽象来调整。关系数据库系统的抽象具有许多有趣的应用程序,尤其是出于安全目的,例如细粒度的访问控制,水印等。
其他特征
其他DBMS功能可能包括:
- 数据库日志- 这有助于保留执行功能的历史记录。
- 用于生成图形和图表的图形组件,尤其是在数据仓库系统中。
- 查询优化器- 在每个查询上执行查询优化,以选择要执行的有效查询计划(操作的部分订单(树))以计算查询结果。可能针对特定的存储引擎。
- 用于数据库设计,应用程序编程,应用程序程序维护,数据库性能分析和监视,数据库配置监视,DBMS硬件配置(DBMS和相关数据库可能涵盖计算机,网络和存储单元)和相关数据库映射(尤其是针对数据库的数据库)(尤其是用于数据库)映射(尤其是用于分布式DBMS),存储分配和数据库布局监视,存储迁移等。
越来越多的呼吁将所有这些核心功能纳入数据库管理和源控制的同一构建,测试和部署框架中。从软件行业的其他开发项目中藉用,某些产品诸如“数据库的DevOps ”之类的产品。
设计和建模
数据库设计人员的第一个任务是生成一个概念数据模型,该模型反映了要在数据库中保存的信息的结构。一种常见的方法是通常借助绘图工具来开发实体与关联模型。另一个流行的方法是统一的建模语言。成功的数据模型将准确反映所建模的外部世界的可能状态:例如,如果人们可以拥有多个电话号码,则可以捕获此信息。设计一个良好的概念数据模型需要很好地了解应用程序域;它通常涉及问有关组织感兴趣的事情的深入问题,例如“客户也可以成为供应商? “或“如果一架飞机通过法兰克福从纽约飞往迪拜,那是一两次飞行(甚至是三架)吗?”这些问题的答案确定了用于实体(客户,产品,航班,飞行段)及其关系和属性的术语的定义。
产生概念数据模型有时涉及业务流程的输入或组织中工作流程的分析。这可以帮助确定数据库中需要哪些信息,以及可以遗漏的信息。例如,在确定数据库是否需要持有历史数据以及当前数据时,它可以有所帮助。
在产生了用户满意的概念数据模型之后,下一阶段是将其转换为一个在数据库中实现相关数据结构的模式。该过程通常称为逻辑数据库设计,输出是以模式形式表达的逻辑数据模型。概念数据模型(至少在理论上)与数据库技术的选择无关,但逻辑数据模型将以所选DBMS支持的特定数据库模型表示。 (术语数据模型和数据库模型通常可以互换使用,但是在本文中,我们将数据模型用于设计特定数据库的设计,以及用于表达该设计的模型表示法的数据库模型)。
通用数据库的最流行的数据库模型是关系模型,或更确切地说,是由SQL语言表示的关系模型。使用此模型创建逻辑数据库设计的过程使用一种有方法的方法称为归一化。归一化的目的是确保每个基本“事实”仅在一个地方记录,以便插入,更新和删除自动保持一致性。
数据库设计的最后阶段是制定影响性能,可伸缩性,恢复,安全性等的决策,这些决策取决于特定的DBM。这通常称为物理数据库设计,输出是物理数据模型。在此阶段,一个关键目标是数据独立性,这意味着最终用户和应用程序为性能优化目的做出的决策应该是看不见的。数据独立性有两种类型:物理数据独立性和逻辑数据独立性。物理设计主要是由性能要求驱动的,并且需要对预期的工作量和访问模式有充分的了解,以及对所选DBMS提供的功能的深入了解。
物理数据库设计的另一个方面是安全性。它既涉及定义数据库对象的访问控制,又要定义数据本身的安全级别和方法。
楷模
数据库模型是一种数据模型,该模型可以确定数据库的逻辑结构,并从根本上确定可以存储,组织和操纵数据的方式。数据库模型的最流行示例是使用基于表格的格式的关系模型(或关系的SQL近似)。
数据库的常见逻辑数据模型包括:
对象 - 关系数据库结合了两个相关的结构。
物理数据模型包括:
其他模型包括:
专门模型针对特定类型的数据进行了优化:
外部,概念和内部视图
数据库管理系统提供了数据库数据的三个视图:
- 外部层次定义了每个最终用户如何看到数据库中数据的组织。单个数据库可以在外部级别具有任何数量的视图。
- 概念级别(或逻辑级别)将各种外部视图统一为兼容的全局视图。它提供了所有外部视图的综合。它超出了各种数据库最终用户的范围,而数据库应用程序开发人员和数据库管理员则不感兴趣。
- 内部级别(或物理级别)是DBMS内部数据的内部组织。它与成本,性能,可伸缩性和其他操作问题有关。它使用诸如索引之类的存储结构来提高性能,涉及数据的存储布局。有时,如果存在这种冗余性的性能依据,则它会存储从通用数据计算出的单个视图(实质性视图)的数据。它平衡了所有外部视图的性能要求,可能是冲突,以试图优化所有活动的整体绩效。
虽然通常只有一个数据的概念和内部视图,但可以有许多不同的外部视图。这允许用户以更与业务相关的方式查看数据库信息,而不是从技术,处理观点中查看。例如,公司的财务部门需要所有员工的付款详细信息,作为公司支出的一部分,但不需要有关符合人力资源部门利益的员工的详细信息。因此,不同部门需要对公司数据库的不同看法。
三级数据库体系结构与数据独立性的概念有关,该概念是关系模型的主要初始驱动力之一。这个想法是,在一定层面进行的更改不会影响更高级别的视图。例如,内部级别的变化不会影响使用概念级界面编写的应用程序程序,从而减少了进行物理变化以提高性能的影响。
概念视图提供了内部和外部之间的间接水平。一方面,它提供了数据库的共同视图,独立于不同的外部视图结构,另一方面,它抽象了如何存储或管理数据的细节(内部级别)。原则上,每个级别,甚至每个外部视图都可以通过不同的数据模型呈现。实际上,给定的DBMS通常使用相同的数据模型,用于外部和概念级别(例如,关系模型)。内部级别隐藏在DBM中并取决于其实现,需要不同的细节级别,并使用其自己的数据结构类型。
研究
自1960年代以来,数据库技术一直是一个积极的研究主题,无论是在学术界还是在公司的研发小组中(例如IBM研究)。研究活动包括原型的理论和发展。著名的研究主题包括模型,原子交易概念,相关的并发控制技术,查询语言和查询优化方法, RAID等。
数据库研究领域有几个专门的学术期刊(例如,数据库系统- TODS,数据和知识工程-DKE的ACM交易)和年度会议(例如, ACM Sigmod ,ACM PODS , VLDB , IEEE IEEE ICDE)。