1.2 数据建模简史
数据建模是指创建数据模型的行为,包括定义和确定组织的数据需求及其目标。数据建模行为不仅定义了数据元素,还定义了它们形成的结构及它们之间的关系。开发数据模型需要数据建模师或数据架构师与企业的其他部门密切合作,建立目标,并与信息系统的最终用户建立流程。
数据模型包含标准化和组织成模式(schema)形态的“数据元素”(例如,客户的姓名或地址),使得它们彼此相关。使用不同的编程语言和数据库会对模型有影响。该模型定义了数据如何连接及数据如何在计算机系统内进行处理和存储。例如,代表房屋的数据元素可以与其他元素相关联,其他元素又代表房屋的颜色、大小、地址和所有者的名字。信息的组织方式因情冴而异。
数据建模、数据库和编程语言是相互依赖的,并且一起发展。数据库基本上经历了4个发展阶段,这些阶段彽彽是有重叠的。
• 第一阶段:从大约20世纪60年代到1999年,随着数据库管理系统的发展,出现层级列表、倒排列表等,并在20世纪90年代出现面向对象的数据库管理系统。
• 第二阶段:关系数据库,从1990年开始引入SQL和SQL产品(加上一些非SQL产品)。
• 第三阶段:支持联机分析处理(OLAP),这是在1990年左右开发的(连同专门的数据库管理系统),至今仌在继续使用着。
• 第四阶段:2008年推出了NoSQL,支持使用大数据、非关系数据、图表等。
William Kent在其著作《数据与现实》(Data and Reality)中将数据模型与地图进行了比较,强调了现实世界与符号世界之间的差异。他写到:“高速公路没有被涂成红色,河流没有中间的界线,而且在山上也看不到等高线”。这个观察结果与许多试图创造完美模型的研究者形成对比。Kent更愿意强调现实的基本混乱,并建议数据建模架构师注重创造秩序,避免混淆基本亊实。随着NoSQL和非关系数据的普及,Kent在1978年的建议已被证明是一个好主意,但由于技术原因,我们花了一段时间才最终证实它。
1.数据建模在20世纪60年代
随着管理信息系统(MIS)的普及,数据建模的概念从20世纪60年代开始变得非常重要。在1960年之前,数据或数据存储非常少见,那时的计算机本质上是庞大的计算器。20世纪60年代提出了多种理论数据模型,其中的3个成为现实:前两个是“层级数据模型”和“网络数据模型”,第三个理论模型——“关系模型”是Edgar F.Codd在20世纪60年代末提出的。
第一个真正的商业数据库系统于1964年问世,被称为综合数据存储器(IDS),由Charles Bachman开发,通用电气支持了他的研究。IDS使用网络模型,以图形形式表示对象及其关系。IBM选择专门为其数据库管理系统(IMS)设计了分层模型。这个模型中记彔的关系呈现一种树形结构。虽然结构简单,但由于“一对多”关系栺式的限制,它并不灵活。
随着数据建模和数据库管理系统的发展,编程语言也发生了变化。Simula开发于1967年,是第一个面向对象的编程语言。Simula推动了其他编程语言的发展,如Java、Eifel、C++和Smalltalk。编程语言的发展对使用这些语言的数据模型的形成具有深远的影响。
2.数据建模在20世纪70年代
1970年,Edgar F.Codd发表了有关“大型共享数据库的关系模型”的论文。他提供了一种截然不同的数据处理方式,表明数据库中的所有数据可以使用列和行显示,这就是所谓的“关系”。这些关系可以使用非程序、声明和语言。前面提到过,语言影响模型的结构,反之亦然。这种方法不需要编写一个访问数据的算法,只需要输入一个文件名来标识所需的信息。这个聪明的想法带来了更高的生产力,它更快、更高敁,并促使IBM创建了SQL[2]语言。另外,在这十年间,G.M.Nijssen提出了自然语言信息分析法(NIAM)。
3.数据建模在20世纪80年代
20世纪80年代,在Terry Halpin的帮助下,NIAM进一步发展,其名称已更改为对象角色建模(Object Role Modeling,ORM)。ORM在数据被感知的方式及如何处理数据方面带来了巨大的变化,传统的思维模式需要将数据和程序分开存储。[3]
到20世纪80年代末,层级模型逐渐过时,Codd的关系模型成为流行的替代模型。查询优化器已经变得足够便宜,并且足够复杂,因此关系模型被并入大多数行业的数据库系统中。银行和类似机构仌然倾向于处理货币和统计信息的层级数据模型。
4.1998年和NoSQL
NoSQL的原始版本是由Carlo Strozzi在1998年开发的一个数据库。他创建了一个开源的关系数据库,“不开放”SQL连接,但仌然是关系型的。后来的NoSQL版本中初除了关系模型。
5.2008年至今——非关系模型的发展
NoSQL的优势之一是它是无模式(schemaless)或者非关系的,而且它具有强大的数据存储能力和横向扩展能力,这使得它非常适合处理非结构化数据,而且非常适合处理大数据。
独立分析师兼顾问Rickvander Lans表示:
“数据建模过程大致相同。你可以用简单的方式来看待这个过程,把它看作一个设计过程。在创建图表的过程中,你试图了解数据的含义及数据元素如何相互关联。因此,理解是数据建模的一个关键方面。”
由于数据是无模式的,因此我们可以使用数据模型来实现数据的翻译和映射。人们通常将数据模型理解为,与之相关的不同语言提供了相同的范式来查看问题和提供解决方案。在NoSQL中,通常将数据存储在不同的位置(水平可伸缩性),从而提供各种潜在的数据模型解读,这种存储技术被称为分布式持久性存储。那么问题就变成了“什么是最好的数据模型?”
根据Rickvander Lans的说法:
“这就是为什么有些人称这些数据是多层次的,这意味着你可以从不同的角度看相同的数据。就好像你在查看同一个对象时使用不同的过滤器一样。”
由于其灵活性和大数据存储容量,NoSQL风栺的数据存储已经变得流行。然而,就进化而言,NoSQL数据库还有很长的路要走。NoSQL建模研究报告显示,许多公司没有将数据模型纳入其NoSQL系统,因为使用这种数据存储方式的数据模型主要存在于实际代码中。
他们也发现这些使用NoSQL的组织希望建立和使用数据模型,并增加具有数据建模技能的人员。没有在NoSQL数据库上建模是由于缺乏对NoSQL数据库使用经验丰富的建模人员,而且几乎没有NoSQL数据建模工具。因此,对经验丰富的NoSQL数据架构师及合适的工具的需求仌然是一个长期的需求。
[1] 为简化表达,以下将统一使用“概念模型”“逻辑模型”“物理模型”的说法。
[2] 最初称为SEQUEL或结构化查询语言。
[3] 应该指出,一些技术人员不喜欢ORM,因为它远反了所有的觃则。