数据库基本概念

来源:互联网 发布:马自达6 知乎 编辑:程序博客网 时间:2024/06/05 21:50

一.  什么是数据库?

       1.  含义: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,用户可以对文件中的数据进行新增、截取、更新、删除等操作。也可以说数据库是长期储存在计算机内、有组织的、可共享的数据集合。

       2. 基本结构:分三个层次以内模式为框架所组成的数据库叫做物理数据库;以概念模式为框架所组成的数据叫概念数据库;以外模式为框架所组成的数据库叫用户数据库。

           ⑴ 物理数据层:是数据库的最内层,是物理存贮设备上实际存储的数据的集合,是原始数据,是用户加工的对象,由内部模式描述的指令操作处理的位串、字符和字组成。
           ⑵ 概念数据层:是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的逻辑联系,是存贮记录的集合。它所涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。
           ⑶ 用户数据层:是用户所看到和使用的数据库,表示了一个或一些特定用户使用的数据集合,即逻辑记录的集合。数据库不同层次之间的联系是通过映射进行转换的。
       3. 主要特点:
           ⑴ 实现数据共享:数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
           ⑵ 减少数据的冗余度:数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。
           ⑶ 数据的独立性:数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变化不影响数据的逻辑结构)。
           ⑷ 数据实现集中控制:数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
           ⑸数据一致性和可维护性,以确保数据的安全性和可靠性:
                ①安全性控制:以防止数据丢失、错误更新和越权使用;
                ②完整性控制:保证数据的正确性、有效性和相容性;
                ③并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用。
           ⑹ 故障恢复:数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等。

二.  数据库的作用意义。

       1.  查询迅速、准确,且有多种表达与传输方式。

  2.  数据结构化且统一管理。考虑了数据本身的特点,也考虑了数据之间以及文件之间的联系,数据的查询、检索和处理很方便。

  3.  数据冗余度小。数据库系统使得数据不仅可以面向某个局部应用而且可以面向整体应用,大大减少数据冗余,节约了存储空间,有效地避免了数据之间的不一致性。

  4.  具有较高的数据独立性。数据独立性是指用户应用程序与存储在数据库中数据的相互独立性。数据独立性(物理的和逻辑的)是数据库的重要特征和优点,它有利于在数据库结构修改时保持应用程序的稳定性,可以大大减少应用程序员的软件开发工作量。

  5.  数据的共享性好。存放于数据库中的数据的共享性包括系统内部共享性和外部共享性两种,是数据库管理区别于手工管理和文件管理方式的最本质的特征和优点。

三.  数据库的分类

       1. 层次式数据库 -- 层次模型

            (1). 层次模型的逻辑结构 -- 树形结构

                   a.  特点 :有且仅有一个根结点; 根结点以外的其它结点有且仅有一个父结点。

                   b.  表示:  层次模型只能表示“1一M”关系,而不能直接表示“M—M”关系。

       在层次模型中,一个结点称为一个记录型,用来描述实体集。每个记录型可以有一个或多个记录值,上层一个记录值对应下层一个或多个记录值,而下层每个记录值只能对应上层一个记录值。层次模型中实体集之间多对多的联系的处理,解决的方法是引入冗余结点。

            (2). 层次模型的物理结构

                   a.  顺序法:按照层次顺序把所有的记录邻接存放,即通过物理空间的位置相邻来实现层次顺序。

                   b.  指针法:各个记录存放时不是按层次顺序,而是用指针按层次顺序把它们链接起来。

            (3). 层次模型的利弊

                   a.  层次模型的树是有序树(层次顺序)。对任一结点的所有子树都规定了先后次序,这一限制隐含了对数据库存取路径的控制。

                   b.  树中父子结点之间只存在一种联系,因此,对树中的任一结点,只有一条自根结点到达它的路径。

                   c.  不能直接表示多对多的联系。

                   d.  树结点中任何记录的属性只能是不可再分的简单数据类型。

       2. 网络式数据库:利用网络将两个或多个相互独立的局域数据库连接在一起。

            (1). 数据库的逻辑结构 --  网状结构

                   网络式数据库模型是创建在两种“集合结构”(Set Structures),也就是一组记录类型的记录集合(A Set of Records)和一组连接类型的连接集合(A Set of Links)。         


               

                            

            (2). 数据库原理  ---     一个典型的数据库查询过程包括以下步骤。

                  

              a.  用户通过浏览器向网络服务器发送一个查询请求;

              b.  服务器根据参数启动相应的CGI(通用网关接口)或API(应用程序接口)程序(即网关);

              c.  CGI或API程序登录到数据库中,按条件进行查询;

              e.  数据库返回查询结果;

              f.   CGI或API程序把查询结果翻译成为标准的HTML格式,并传给网络服务器;

              g.  网络服务器把包含结果的HTML网页传给浏览器。

            (3). 数据库的利弊

                   a.  扩大了数据资源共享范围。范围可以从局部到全球。

              b.  易于进行分布式处理。网络中,各用户可根据情况合理地选择网内资源,以便就近快速地处理。大型作业及大批量的数据处理,可将其分解给不同的汁算机处理,从而达到均衡使用网络资源,实现分布式处理的目的,大大提高了数据资源的处理速度。

              c.  数据资源使用形式灵活。基于网络的数据库应用系统开发,既可以采用C/S(Client/Server,客户机/服务器)方式,也可以采用B/S(Browser/Server,浏览器/匠务器)方式,廾发形式多样,数据使用形式灵活。

              d.  便于数据传输交流。通过计算机网络可以方便地将网络数据库中的数据传送至网络覆盖的任何地区。

              e.  降低了系统的使用费用,提高了计算机可用性。网络数据库可供全网用户共享,使用数据资源的用户不一定拥有数据库,大大降低对计算机系统的要求,提高了每台计算机的可用性。

              f.   数据的保密性、安全性降低。由于数据库的共享范围扩大,对数据库用户的管理难度加大,网络数据库遭受破坏、窃密的概率加大。

       3. 关系型数据库

           建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。

            (1). 逻辑结构与物理结构 --  二元关系 ,表格,二维数组

                  对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。

            (2). 分类:一类是桌面数据库,例如Access、FoxPro和dBase等;另一类是客户/服务器数据库,例如SQL Server、Oracle和Sybase等。

            (3). 常用概念:

                   关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名

                   元组:可以理解为二维表中的一行,在数据库中经常被称为记录

                   属性:可以理解为二维表中的一列,在数据库中经常被称为字段

                   域:属性的取值范围,也就是数据库中某一列的取值限制

                   关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成

                   关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构

            (4). 利弊

                   a.  容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解

                   b.  使用方便:通用的SQL语言使得操作关系型数据库非常方便

                   c.  易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率

                   e.  高并发读写需求:网站的用户并发性非常高,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

                   f.   海量数据的高效率读写:网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的

                   g.  高扩展性和可用性:当应用系统的用户量和访问量与日俱增的时,数据库没法像web server和app server通过添加更多硬件和服务节点来扩展性能和负载能力。

                   h.  事务一致性:关系型数据库在对事物一致性的维护中有很大的开销,而现在很多web2.0系统对事物的读写一致性都不高。

                   i.   读写实时性:对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出这条数据的,读写实时性要求高。

                   j.   复杂SQL,特别是多表关联查询:任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询等。

       4. 非关系型数据库:非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

            (1). 分类

                   a.  键值存储数据库(key-value):键值数据库就类似传统语言中使用的哈希表。可以通过key来添加、查询或者删除数据库,具有高的性能及扩展性。

           键值数据库主要使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署、高并发。

           典型产品:Memcached、Redis、MemcacheDB

                   b.  列存储(Column-oriented)数据库:列存储数据库将数据存储在列族中,一个列族存储经常被一起查询的相关数据,通常用来应对分布式存储海量数据。

           典型产品:Cassandra、HBase

                   c.  面向文档(Document-Oriented)数据库:同键值数据库类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储。

           面向文档数据库会将数据以文档形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名词与对应值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或JSONB等多种形式存储。

           典型产品:MongoDB、CouchDB

                   d.  图形数据库:图形数据库允许我们将数据以图的方式存储。实体会被作为顶点,而实体之间的关系则会被作为边。

           典型产品:Neo4J、InforGrid  

四.  目前常用的数据库有哪些,各自利弊。

       1.  常见关系型数据库

            a.   Oracle数据库

        ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

        Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c成为私有云和公有云部署的理想平台。

            b.   MySQL数据库

        MySQL(发音为"my ess cue el",不是"my sequel")是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

            c.   MariaDB数据库

        MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。

            d.  SqlServer数据库

        SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用户见面;SQL Server 2000是Microsoft公司于2000年推出,2012年3月份推出的SQL SERVER 2012。

            e.  Access数据库

        Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售。MS ACCESS以它自己的格式将数据存储在基于Access Jet的数据库引擎里。它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库)。

            f.  其他不常用数据库

        DB2,PostgreSQL,Informix,Syase等。

       2.  常见非关系型数据库

            a.   Memcached(key-value)

       memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。memcached缺乏认证以及安全管制,应该将memcached服务器放置在防火墙后。其API使用32位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料。

      memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。存储在内存中,所以需及时备份,否则容易数据丢失。

            b.   Redis(key-value)

        Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

        Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

            c.  MongoDB(Document-oriented)

        MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

            d. Cassandra(Column-oriented)

       Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynamo (分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型)。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。

            e.  其他不常用非关系型数据库

      HBase、MemacheDB、BerkeleyDB、Tokyo Cabinet

      3.  关系型数据库与非关系型数据的区别

            a.  实质。非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。

            b. 价格。目前基本上大部分主流的非关系型数据库都是免费的。而比较有名气的关系型数据库,比如Oracle、DB2、MSSQL是收费的。虽然Mysql免费,但它需要做很多工作才能正式用于生产。
            c. 功能。实际开发中,有很多业务需求,其实并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用性能更高、成本更低的非关系型数据库当然是更明智的选择。






原创粉丝点击