活下去通常不难,活得精彩永远很难。得过不且过,这是一种精神。

《数据规范化反思》读书笔记

Posted on 2012-03-19 18:26  second  阅读(335)  评论(0)    收藏  举报

文章链接:

http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1112normalization/index.html

http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1201normalizationpart2/index.html

 

文章第一部分首先回顾计算机系统出现以前人类的数据记录形式,计算机系统出现初期的数据记录状况,以及规范化的关系型数据库对于新业务应用的限制。

 “在 20 世纪中期推出商业计算之前,人们一直采用与创建商业记录相同的原始方式来存储和处理这些记录。这方面的示例包括石碑、理货筹码和纸张记录形式。随着计算系统的引入,人们设计出了数据规范化来组织业务记录,这样就可以将每个数据项都存储一次,从而保护存储并避免出现更新异常。规范化开发于 20 世纪 70 年代,当时开发规范化是出于竞争原因。那时磁盘空间稀缺而又昂贵,业务记录也不像现在这样复杂,并且只有最新的信息才有可能进行存储。因此,在将业务记录转换为计算机中的规范化表示形式或者进行反向转换时,为此而做的工作通常能够被人们所接受。 

20 世纪 90 年代,随着数据仓库和业务智能的出现,规范化的缺点受到了人们的关注。规范化的数据库方案是业务记录的一种非自然的表示形式,业务用户非常难以理解它,它对于规划和处理分析型业务查询是无效的。因此,人们引入了取消规范化的概念,可以将该缺陷削减至某种程度。

在 21 世纪,IT 世界不断发生着变化。每 MB 的数字存储空间的成本也在急剧下降。由于存储密度和压缩技术方面的改进,规范化已经不再是节省空间所必需的。类似地,审计和合规法规目前要求许多应用程序保留其数据对象的历史记录。结果,插入新的、不可变的数据对象版本通常比更新现有数据更常见,这样做减少了更新异常风险。因此,数据规范化的需求已经不像 20 世纪 70 年代那样普遍适用。

此外,Web、Web Services 和 Web 2.0 技术取得了成功,它们可以确保业务记录是以数字形式(主要是 XML)创建的。客户端软件已经开始利用 XML 及其派生物,而涉及数据库的服务器端软件通常仍然明确要求对针对设计、构建和演化的定制,为了完成规范化所需的数据转换。需要数据规范化的原因之一是,在过去的 30 多年里,数据规范化一直被认为是一种数据库设计方法,并且目前仍然被认为是系统设计的一个组成部分。然而,因为业务记录现在是数字的,更加复杂,并在不断演化,所以是时候重新仔细思考规范化的使用。”

【作者指出,范式化的数据库规划出现的背景是当时存储设备高昂,规范化数据库是典型的以时间换空间策略,以增加还原原始数据面貌的时间换取了以更少存储空间存储更多数据的好处。然而,现在存储价格越来越便宜,而审计以及查询的快捷成为瓶颈时,出现了使用非规范数据的数据库。】

 然后,文章第二部分比较了关系数据,SML,RDF,JSON。

“在大多数商业项目中,数据规范化是从早期就开始关注的一个过程,它几乎总是阻止以原始形式(如 XML)进行业务记录存储。此外,经常假定使用 XML 业务记录是低效的。在本文中的性能比较表明,实际情况并非如此。事实上,从规范化的表中检索和重构业务记录的成本往往比本地存储和检索非规范化的 XML 文件的成本高。因此,在使用 XML 来表示业务记录的场景中,XML 应该也可视为相应的存储格式。以对象为中心的数据访问使用 XML 时的性能往往优于使用规范化关系表时的性能,并且它实现了较高的 XML 事务率 [2]。此外,XML 使应用程序可以实现敏捷的原型制造、开发和演变,因为不必设计和维护关系表与 XML 之间的映射。

Google Big Table 和 HBase 等新兴的存储系统也背离了规范化。它们主张强大的非规范化,并根据数据的访问方式进行数据存储。XML 数据库提出了相同的建议,业务记录最好以与典型访问模式匹配的粒度进行存储 [‎4]。

Linked Data(链接数据)、Semantic Web(语义 Web)和 JSON 是新兴的数据表示方式,但在用于系统间数据交换的业务系统中尚未普及。将数据规范化拆分为三元组(三元组是 Semantic Web 的重要组成部分),从而可以构建 RDF 存储,通过推理从中获得新的事实。利用 RDFa 等语义注释充实以 XML 表示的业务记录,这提供了传统业务记录与 Linked Data(链接数据)和 Semantic Web(语义 Web)的融合方式。

尽管有了这些进步,规范化仍未过时。规范化仍然很有用,例如,用于传统的关系事务处理系统,这些系统支持较高的更新率,很少需要重构原来的业务记录,并且不会执行新版本记录的插入,也不会执行传统版本的更新” 

 


表 9. 关系数据、XML、JSON 和链接数据的比较

 关系数据XMLJSON链接的数据
元数据 数据定义语言 (ISO) XML 架构 XSD (W3C),
名称空间 (W3C)
JSON 架构 (IETF) RDFS(RDF 架构),
Ontology(W3C 及其他地方)
约束 表定义的完整性约束 (ISO) Schematron (ISO),
Relax-NG (OASIS)
-  
触发器 关系型触发器 - - RIF (W3C)
数据交换的序列化 SQL 标准 (ISO) 定义了一个 XML 序列化,但它并未得到广泛使用 – 尚未有商定的 JSON 序列化。存在 RDF 序列化 XML 在数据交换中是广泛使用的语法 (W3C) JSON 是一个序列化的格式,也存在用 XML 表示的 JSON XML, Turtle
表示法 不是关系模型的组成部分 针对 XML 架构和 XML 数据定义的多种注释 - RDFa (W3C) 可以用于注释 XML
查询与 CRUD 语言 数据操纵语言 (Data Manipulation Language, DML), SQL, SQL/XML (ISO) XPath, XQuery (W3C) 及其他 CRUD 语言 JAQL, JSONiq SPARQL (W3C)
Query 与 CRUD API 多种不同的编程语言,例如 JDBC 和 ODBC 多种,包括部分关系型 API 和特定的 API,例如 XQJ - SPARQL Graph Store HTTP Protocol – 适用于 CRUD (W3C)
集合 表、视图、数据库 (ISO) XML 集合函数 (W3C) - RDF 图表 (W3C)
转换与其他语言 SQL(表到表) XSLT(XML 至文本,包括 XML);XForms
SQL XMLTABLE(XML 到关系型)
JavaScript -


表 10. 规范化与非规范化存储的适用性比较

 适用于非规范化数据表示,例如 XML适用于规范化或半非规范化数据表示
1 “以对象为中心” 的数据访问:一起访问全部或大部分业务记录 数据访问是面向集合或面向列的,例如,用于分析
2 通过 Web 服务和 SOA 交换完整的业务记录 不需要重组原始业务记录
3 要求版本控制:用不可变版本的插入取代数据更新 只需要保留每个业务记录的最新状态
4 需要支持架构演变 架构成熟、稳定,并且不可能演变
5 业务纪录的审计与合规性是关键 审计/合规性要求是短期的、薄弱的或不存在

 

【可见,非规范化数据表示在特定场景比现在普遍使用的规范化数据表示存在优势】