如何高效地进行数据建模

理解数据是控制任何企业的先决条件。但只有当这些知识能够被分享和传播时,理解才是有用的。有效的数据建模应该是任何企业架构师的首要关注点。

在我的上一篇文章中,我认为理解一个企业的数据是指导一个企业的核心。但理解只是问题的一半。另一半是能够记录这种理解并与他人分享。

如果没有对数据的共同理解,就谈不上跨系统或组织的共享数据。传统上,这是通过使用数据字典来完成的--这些文件旨在解释数据结构中每个字段的内容和格式。可悲的现实是,这些文档必须手动创建和更新,因此很少会进行更新。其结果是往往会出现过时的、无用的文档和沮丧的架构师和开发人员。但其实还有更好的办法。

正确完成建模

在过去的几十年里,数据建模的努力通常集中在关系数据建模或可扩展标记语言(XML)的建模上。只要数据存储在关系数据库中,关系数据建模就会很好,但除此之外,它很少会有其他的用途。而且XML也不能被可靠地称为建模语言。XML是序列化数据的规范--即定义了如何将数据写入文件。XML为构造数据的序列化提供了一种格式,但它不是一个真正的模型。

我所说的“模型”指的是以数学为基础的形式规范。实际上,这意味着是可以使用形式化方法进行验证的东西。通俗地说,这意味着我们可以用数学运算来证明它是正确的,并且我们可以使验证过程自动化。而在XML模式中捕获数据不符合此定义下的模型。但可以肯定的是,我们可以使用软件来验证该XML格式是否良好,是否符合一些XML模式的文档。但这还不足以真正地对数据进行建模。

无论是计算机还是人,如果不同时理解数据的语法(结构)和语义(含义),就无法理解数据。XML可以捕获语法,但它不能天生捕获语义。语义可以用XML格式编写,但是这些语义必须首先在一些更正式的建模方案中被捕获。换句话说,企业需要一个正式的本体。这种建模方案大多基于形式逻辑,通常是公共逻辑或描述逻辑。

迄今为止,最常用的语义建模语言是基于描述逻辑的网络本体语言(OWL)。这意味着我们不仅可以正式验证模型及其包含的数据,还可以通过对数据的推理来推断新的事实,并且我们可以证明这些推断的正确性。因为OWL是本体建模的事实上的标准,所以我将把剩下的内容限制在OWL上。

但是等等!所有这些都不意味着你需要将你的数据存储为OWL。在你过于担心如何将存储格式强加给不情愿的开发人员之前,先听我说完。

数据模型和数据存储

军事策划者有一句格言:“业余爱好者担心战术,而专业人士担心后勤。”他们试图达到的核心思想是,如果你只是制定了一个压倒敌人防御的战斗计划,那并没有什么用处,但是,你也不能只让你自己的部队获得执行计划所需的燃料和弹药。同样的,我们也可以说实现者通常会担心存储,而架构师会担心模型。没有理由必须认为数据模型是应该由特定系统使用的存储技术来决定的。一个定义良好的模型可以通过无损过程转换成任何需要的存储格式。

通常,我们会从存储解决方案开始,然后回到数据格式。或者多种格式。大约20年前,当XML首次被引入时,它被誉为了通用的数据交换格式。在这种情况下,需要交换数据的各种系统可以采用它们当前的存储模式(通常是关系数据库),并将数据转换成可扩展标记语言,以便与其他系统进行交换。其结果是企业和系统架构师会过度关注于XML格式,而几乎忽略了系统的预期功能或企业的整体互操作性。

这个问题在国防部尤为严重。该部门支持着一个名副其实的需要手工创建和维护的XML规范。每一个XML模式都是单独维护的,每次更新时,都必须检查每个相关的规范是否有潜在的影响(通常是手动的)。除此之外,还必须在XML模式中为无法更新以符合新模式的系统进行设置。其结果是产生了一个混乱的规范混合体,迫使人们必须把注意力集中在使XML协同工作上,而不是集中在XML应该促进的任务上。

与其从存储格式开始,然后确定如何为信息交换来表示它,还不如从与存储无关的数据模型(如OWL)开始,然后将其用作生成数据库模式和数据交换格式的基础。这不仅可以让您专注于理解现有的数据(而不是一些开发人员想的如何将它塞进数据库),通过从基于模型来创建的多个数据表示,可以最小化维护尾部。因为对企业数据的任何更改都只需要在主模型中手动更改,因而从该模型生成其他存储和交换模式时也可以确保这些模式之间的一致性。

企业数据建模

如果你关注的只是企业,那么很明显,你对数据的关注已经跨越了整个企业,现在你可能会认为对企业中的所有数据进行建模的前景是相当令人望而生畏的。但不要害怕,如果你足够小心的话,这也可以成为一项你可以安全地委托给许多人的任务。

创建一个单一的企业数据模型通常是徒劳的。对于一个群体来说,有太多的数据需要建模,有太多相互竞争的利益集团试图将模型推向他们喜欢的方向,并坚持认为并没有其他方法能够适合他们。但是使用OWL开发的本体是模块化的,这意味着你可以集成来自不同来源的多个模型。不是创建一个覆盖整个企业的单一模型,而是针对每个不同的利益集团(业务领域、开发团队等)。可以为它关心的数据定义自己的本体。

不幸的是,这几乎肯定会导致数据模型的重叠,但对不同对象会有不同的建模。这个问题的解决方案是采用一个通用的上层本体,企业中的每个本体都应该从这个本体中派生出来。一个通用的上层本体不会阻止所有的互操作性问题,但是有了一个好的上层本体,它会通过阻止完全荒谬的构造来约束这些问题,比如将“位置”变成一种“事件”(不,说真的,我已经看到这种情况了)。

有许多候选的上层本体可用,它们中的大多数会试图将所有信息分成五到六个顶级类别。但是,这些本体中的大多数都会遇到这样的问题:有些本体所拥有的数据类并不适合他们的基本类,结果就会产生像将位置作为事件类型这样的错误。在我的经验中,基本形式本体论(BFO)应该是其中最深思熟虑的。在我使用BFO的几年中,我几乎没有发现一个案例,其中所考虑的数据会不符合BFO的类层次结构。

无论如何,企业架构师必须在其特定环境中选择一个最有效的数据建模理念。不管你选择什么样的数据建模理念,请记住,你有义务捕获企业中所有数据的语法和语义。

原文地址:https://www.cnblogs.com/liangzilingyu/p/11602464.html

时间: 2024-11-13 08:16:46

如何高效地进行数据建模的相关文章

[Elasticsearch] 数据建模 - 处理关联关系

数据建模(Modeling Your Data) ES是一头不同寻常的野兽,尤其是当你来自SQL的世界时.它拥有很多优势:性能,可扩展性,准实时的搜索,以及对大数据的分析能力.并且,它很容易上手!只需要下载就能够开始使用它了. 但是它也不是魔法.为了更好的利用ES,你需要了解它从而让它能够满足你的需求. 在ES中,处理实体之间的关系并不像关系型存储那样明显.在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用.在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点.

GraphX 图数据建模和存储

背景 简单分析一下GraphX是怎么为图数据建模和存储的. 入口 可以看GraphLoader的函数, def edgeListFile( sc: SparkContext, path: String, canonicalOrientation: Boolean = false, numEdgePartitions: Int = -1, edgeStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY, vertexStorageLevel: S

高效的TCP数据拆包器

高效的TCP数据拆包器 接收器,每秒拆1KB的包达到30万以上 /// 数据同步协义数据接收器 /// </summary> /// <remarks> /// 主要功能有 /// 1.将一个TCPSocket的所有数据全部接收 /// 2.解析协义 /// 3.解析完成后的协义调用 Handler通知外部处理 /// 4.定义一个协义解析线程不停的解析协义 /// </remarks> public class TCPReceiver : IDisposable {

用户画像数据建模方法

作者:百分点技术总监郭志金 摘自:百分点(ID: baifendian_com) 从1991年Tim Berners-Lee发明了万维网(World Wide Web)开始,到20年后2011年,互联网真正走向了一个新的里程碑,进入了“大数据时代”.经历了12.13两年热炒之后,人们逐渐冷静下来,更加聚焦于如何利用大数据挖掘潜在的商业价值,如何在企业中实实在在的应用大数据技术.伴随着大数据应用的讨论.创新,个性化技术成为了一个重要落地点.相比传统的线下会员管理.问卷调查.购物篮分析,大数据第一次

MongoDB实战-面向文档的数据(找到最合适的数据建模方式)

前一段时间一直研究通过Ruby操作MongoDB数据库,在学习的过程中也分享了自己学习成长的过程,撰写了包含两篇入门操作文章和十二篇进阶文章.本篇文章开始,我们将进入MongoDB的实战操作流程,MongoDB这一非关系型数据库-是一个文档型数据库,存储的是面向文档的数据. 如何在MongoDB数据库中使用schema 设计数据库schema是在已知数据库系统特性.数据本质以及应用程序需求的情况下为数据集选择最佳表述的过程.传统的关系型数据库RDBMS中鼓励使用正规化的数据模型,从而确保数据的可

《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型 (转)

第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以跳过本章. 本章将带你漫游使用实体框架建模的基本实例,建模是实体框架的核心特性,同时也是区别实体框架和微软早期的数据访问平台的特性.一旦建好模,你就可以面向模型编写代码,而不用面向关系数据库中的行和列. 本章以创建一个简单概念模型的实例开始,然后让实体框架创建底层的数据库,剩下的实例,将向你展示,如

《MySQL Workbench数据建模与开发》

<MySQL Workbench数据建模与开发> 基本信息 原书名:MySQL Workbench:Data Modeling & Development 原出版社: McGraw-Hill Osborne Media 作者: (美)麦克劳克林(McLaughlin, M.) 译者: 张骏温 出版社:清华大学出版社 ISBN:9787302363712 上架时间:2014-6-5 出版日期:2014 年6月 开本:16开 页码:368 版次:1-1 所属分类:计算机 > 数据库

保险业个险计价模块开发的数据建模经验分享

前段时间在开发某大型保险公司的项目,其中,涉及到个险计价的模块,之前没接触过保险业,一看他们某险种的费率表,顿时惊呆了,是一个四维的表,也就是,四种因素(性别.保险期间.交费期间.年龄)决定一个价格,还有一个影响最终保费的因素,就是保额(也就是保险金额---最大赔付金额),但这个跟价格的关系是线性的,得出标记所以这里就忽略它不谈了. 某险种的费率表如下图所示: 这是某险种的费率表,要通过四个条件得出一个价格,如某男,保险期间设为30年,交费期间为10年,假如他现在的年龄是14岁,那他的保费价格是

NoSQL数据建模技术

原文来自“NoSQL Data Modeling Techniques”,由酷壳网陈皓编译<NoSQL数据建模技术>.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西.总体来说,我觉得NoSQL更适合做Cache. 下面是正文: NoSQL数据库经常被用作很多非功能性的地方,如,扩展性,性能和一致性的地方.这些NoSQL的特性在理论和实践中都正在被大众广泛地研究着,研究的