Live软件开发面面谈——数据库

第5章  数据库

数据库是为了存储和查询大量现实的或虚拟的数据而建立的软件系统。为此首先要将形形色色的数据对象抽象成统一的模型。使用最广泛的是实体-关系(Entity-Relationship)模型,实体对应的就是日常所说的物体、对象,关系则刻画它们之间的联系。数据库必须以某种形式表达实体和关系,并实现对其的存储和查询。选用不同的形式和相应的理念,就构成数据库不同的模型。长期以来,关系型数据库以其成熟的理论和实现、诸多优良的特性,几乎是数据库的代名词。然而从2000年代末开始,NoSQL成了数据库领域的热词。这个对关系型数据库一统江山的局势构成挑战的大家族,八仙过海,各显神通。按数据模型,主要可以分为以下几种:

  1. 文档型:MongoDB、Apache CouchDB、Couchbase、Lotus Notes
  2. 宽列型:Cassandra、HBase、BigTable
  3. 键值型:Redis、Couchbase【注:Couchbase的设计同时包含文档和键值】、MemcacheDB
  4. 图型:MarkLogic、Neo4J

以上列表当然没有穷尽NoSQL数据库,之所以选择它们,或是因为市场占有率较高,或是因为出自Google、Facebook这样的互联网巨头。这其中最成功的是文档型数据库MongoDB,根据DB-Engines按照数据库流行程度的排名,MongoDB自2014年来就稳居前五名(2017年伊始,又爬升到了第四名),而其他四名都是历史悠久的关系型数据库Oracle、MySQL、Microsoft SQL Server和PostgreSQL。MongoDB成功进入被关系型数据库垄断的第一阵营,在占有率上被它们远远甩在后面的其他竞争者中,若只比较NoSQL,另两种文档型数据库Apache CouchDB和Couchbase也名列前茅。

随着这股潮流出现的便是一系列关于文档型数据库的问题:文档型数据库有何优点?它和关系型数据库有哪些差别?这些差别会怎样影响到使用它们的应用程序?关系型数据库会式微吗?本章就将从数据库的根本出发,全面分析和比较两类数据库的理念和设计,通过这些分析不仅能回答以上问题,还可以对抽象的数据库理论有更透彻的理解。

5.1  多值与复合属性

关系型数据库用来代表实体和关系的形式之单元是记录,文档型数据库的单元是文档。记录依托的是关系代数中的关系概念,通常被描述成表格中的行那样的一维结构。【注:为了更具体和有针对性,以后的讨论都使用关系型数据库的术语(如表、记录),而不是用关系代数的对应术语(如关系、元组)。】文档则可以容纳集合的和层次的数据,就像通用的文档格式XML和JSON做的那样。将一个实体保存到关系型数据库中时,常常要将它拆成多条记录,记录之间以外键联系。反观用文档型数据库保存实体时,经常用一个文档就能对应一个实体。探究造成此差别的因素,结构上的原因正是关系型数据库中字段值一般是简单的、单值的,而能够容纳多值和复合属性是文档型数据库的标志之一(冗余和效率等其他影响设计的因素以后也会被论及)。关系型数据库真的不能采用多值和复合数据类型吗?如果不是,为什么长久以来遵循这样的原则?两种数据库模型在处理属性上的差异值得详细讨论。

实体被映射成记录,用于描述实体的属性对应记录的字段(列)。实体之间的关系依照其间的映射基数(Mapping cardinalities)即一对一、一对多和多对多的种类分别用实体记录的字段或专门的记录来表达。源于其背后的关系代数,关系型数据库在建模刻画数据时,表现出数学的严格性——所有要被建模的数据都被包含,并且尽量减少数据的冗余——一分不多,一分不少。前者很好理解,后者则是为了两个目的。一是减少冗余数据所导致的存储

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值