数据模型的常见误区

数据模型的要求

1.要直观的模拟真实世界

2.容易被人理解

3.便于计算实现

一、低质量建模

Steve Hoberman的《Data Model Scorecard》一书中详细罗列了低质量建模的十宗罪

1.  没有准确的捕获到需求

这个属于数据建模最大的问题。通常由于需求调研不完备,需求理解不充分,项目前期缺乏足够的沟通,以及数据调研准备不足、后期测试不充分等原因引起。在系统真正使用时,发现有些需求功能无法满足,造成表结构的大幅调整。

举例一个简单的例子,某集团公司有30个分公司和子公司,以一个公司为试点部署一套系统,而其中需要设计一张员工表,该表的设置为Employee 员工编号为主键,而在上线推广时发现问题,就是该集团公司其中有几个分公司的HR系统由于历史原因,员工编号与其他公司不是同一套系统,会造成员工编号存在重复的现象,这样就不得不修改主键,以及后面使用到该表的程序都需要大幅修改。这只是一个简单的例子,类似这种例子比比皆是。

2.  数据模型不完整

数据模型不完整分为两种情况,一种是设计时对需求把握不准确,造成数据模型缺少一些相关的表,无法完全覆盖需求,这个其实就是上面的例子1。还有一种情况是元数据不完整,我们这里强调的是这个。比如,对于column的constraints的限制,例如参照完整性的定义,比如是否为空。再比如某个Column的default值,是否有设置。另外就是表的描述,字段含义的描述等信息,是否提供。你很难想象下游系统去理解一个完全没有表定义,字段含义定义的有多痛苦。

3.  各层模型与其扮演角色不匹配

数据模型分为概念模型,逻辑模型和物理模型,每一层的模型的使命不同。概念模型是为了确定范围以及奠定基础,逻辑模型是为了厘清数据之间的关系并且勾勒理想状态下的数据结构,物理模型是为了性能,安全以及开发的方便构建的适应真实情况的模型,每一层的目的均不相同,很多data modeler不做概念模型和逻辑模型,直接一步到位到物理模型,或者每层的结构没有遵从该层设计的本意。

4.  数据库结构不合理

这个就好比,你画一个房子的设计图,每个房间都得有门,这一类设计的基本常识。比如,一个表通常都得有主键,主键又一定不能为空,之类。相同的两个字段,在不同表中需要保持一致,如column name, 字段长度等等。

5.  抽象化不够,造成模型不灵活;又或过于抽象化,带来程序开发的困难

这个部分很重要,一个数据模型的是否能够承受未来的变化,很大程度上都取决于抽象化的程度。这个有点像动物的分类,门纲目科属种,无论飞禽走兽都可以抽象称为动物,而动物中又分脊索动物门,软体动物门等,在脊索动物门下又可以分为哺乳纲,哺乳纲又分草食目肉食目杂食目。每一类都有向上的抽象,所涵盖范围都更为广泛。数据模型也是一样的道理,至于建到门纲目科属种哪一层,实在取决于当下的需求以及未来可能的扩展。

6.  没有或者不遵循命名规范

这个我们见的很多了,老外的项目这方面就好很多,国内的项目千奇百怪,用汉语拼音命名的都比比皆是,这里我就不举例子了,未来会有单独的大篇幅的课程讲命名规范。

7.  缺少数据模型的定义和描述

这个覆盖率可能超过90%,我接触过的很多项目都没有数据模型或者数据模型和真实数据库里面的内容就是俩东西,字段的含义表的含义基本靠猜,如果恰好数据模型又犯了6的错误,更是猜无可猜。

8.  数据模型可读性差

嗯,这个有意思,见过直接用DDL管理模型的,也见过用Excel管理的,还见过用Word管理的。没有ER图的,数据字典基本为空的,这种例子比比皆是。

9.  元数据与数据不匹配

这个问题也很常见,比如表/字段乱起名字,再比如最开始某表/某字段具备一种含义,而开发过程中发现用这表/字段还能干点别的类似的事,然后为了从前的程序不修改,表名和字段名也不改了,直接应用。比如,原来的表是客户,起名叫CUSTOMER, 里面记录CUSTOMER ID,Name,地址,电话等等,然后发现有的时候,我们的供应商需要的字段差不多,本来应该建个表叫VENDOR,结果为了图省事直接用CUSTOMER表,并且模型里面也不加解释,之类。

10. 数据模型与企业标准不一致

二 、 低质量数据模型,会给企业带来哪些影响

这个问题是企业信息管理存在的普遍问题,也是哪怕是很多好的Data Modeler也犯的错误,就是以项目视角出发,

按照自己的习惯进行模型设计。而企业,(指甲方),在这方面通常也没有标准化的流程和政策来控制,

因此造成整个企业都是各个项目有各个项目的标准,但缺乏企业级的标准,这也是数据质量问题的根源之一。

由于低质量的数据模型的原因,会给企业带来哪些影响呢?

1.  就是大量修改和重做

尤其是我们提到的没有准确捕获到需求的这种错误。

2.  重复建设

这个指的是,由于低质量的数据模型,造成系统很难可持续的发展,当需要添加新功能时,很难在原有系统基础上添加,只能重做。

3.  知识丢失

模型文档不完备,比如前面提到的缺乏定义之类的问题。这些知识都当时封存在Data Modeler的脑子里,有个经典的段子:三个月之内只有我知道,三个月之后只有上帝知道。而数据仓库项目又经常是经年累月的长期的过程,项目里面的人来的来走的走,知识没法传承。

4.  模型难以理解,下游开发困难

假设你弄一套千八百张表的数据库,然后还不给说明书,你让下游的Data Mart的设计者,报表等应用的设计者怎么进行开发?

5.  高成本

上面说的这些,都会带来高成本,包括项目周期的延长,包括人员的培训,包括开发的周期,错误的增加等等。

6.  数据质量低下

同时呢,这也是数据质量低下的主要原因之一,比如你数据仓库这一层模型做的质量低下,你就很难保证下游的Data Mart会正确的使用。也就难保证基于其的报表的数据是正确的。

7.  新业务无法展开

比如你新建一个数据应用,基于主数据的,而主数据的数据质量一塌糊涂,是不是你这个新应用就没法做起来啊。

等等

时间: 2024-10-29 18:29:33

数据模型的常见误区的相关文章

NODE.JS学习的常见误区及四大名著

NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang/p/4374681.html 收到了很多兄弟的热情回复和激烈讨论,在此深表感谢,有的朋友觉得我写的比较粗犷,没有给出具体的性能分析和对比,在此我想说的是其实好多东西的性能分析,根本就不用我写到博客上,其一是如果我写了,很多人同样会觉得不客观,不中立,其二是网上很多中立的机构,随便搜索一下,对比太多

HTML5标签使用的常见误区----转载

最近组内进行HTML5标签的学习,方法呢就是大家每人挑选几个标签,自己先去学习,然后给大家作讲解.这个过程大家还是挺有收获的.但是现在HTML5还处在草案阶段,有些新的标签元素的解释也是经常有变化,甚至标签加入/移出也很频繁(比如 hgroup),同时现有的大的门户网站在使用HTML5方面也没有很好的范例可以参考,让大家的学习过程更摸索.下面是我在 html5doctor 上面看到的一篇文章,在目前大家懵懂的阶段,可能看看大师的讲解会更容易理解.由于才疏学浅,很多不明白的地方可能只是做了字面上的

【Android】深入掌握自定义LayoutManager(一) 系列开篇 常见误区、问题、注意事项,常用API。

转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52948009 本文出自:[张旭童的博客] 本系列文章相关代码传送门: 自定义LayoutManager实现的流式布局 欢迎star,pr,issue. 本系列文章目录: 深入掌握自定义LayoutManager(一) 系列开篇 常见误区.问题.注意事项,常用API. 深入掌握自定义LayoutManager(二) 实现流式布局(creating) 概述 这篇文章是深入掌握自定义Layo

MySQL锁的常见误区

今天给大家分享的内容是MySQL锁的常见误区.MySQL的锁包括两种lock和latch.latch的面向对象是线程,主要用来管理数据库临界资源的并发访问,锁的时间非常短,也不会产生死锁.不需要人工干预,所以这里我们不再做介绍.而lock则是面向事务的,操作的对象是数据库的表.页及行,用来管理并发线程对共享资源的访问,会产生死锁.因为我们现在数据库使用的是innodb存储引擎.所以今天主要给大家介绍的是innodb的lock的常见几个误区. 在介绍之前,我们需要再了解lock的几个概念: 行锁:

技术干货 | Docker容器中需要避免的十种常见误区

Docker容器的三大优势: 第一:具备恒定特性–操作系统.库版本.配置.文件夹以及应用程序全部涵盖在内.大家可以将质量检查流程中使用的测试镜像原封不动地引入生产环境当中. 第二:具备轻量化特性–容器的体积非常小巧.相较于动辄成百上千MB的操作系统,它只需要配备主进程所必需的内存外加数十MB额外容量. 第三:速度惊人–大家可以享受等同于单一进程的容器启动速度.相较于长达数分钟的传统负载启动时长,现在我们完全能够在几秒钟内启动一套新容器. 不过很多用户仍然在以对待典型虚拟机的方式审视容器,在这种情

0709 C语言常见误区----------函数指针问题

1.函数指针的定义 对于函数 void test(int a, int b){ // } 其函数指针类型是void (* ) (int , int), 注意这里第一个括号不能少, 定义一个函数指针,void (* pfunc)(int , int) ,其中pfunc就是函数指针类型, 它指向的函数类型必须是返回值为void, 参数为两个int的. 2.函数指针赋值 函数指针可以直接用函数名赋值,pfunc = test, 或者 pfunc = &test: 3.调用函数指针 pfunc(3, 4

0709 C语言常见误区----------二维数组做参数

总结: 1.二维数组名是指向一位数组的指针,本例中,其类型为 int (*)[4],在传递的过程中丢失了第一维的信息,因此需要将第一维的信息传递给调用函数. 关于二维数组名代表的类型,可通过下面的例子看出. 1 /************************************************************************* 2 > File Name: test_2arr.c 3 > Author:Monica 4 > Mail:[email prot

3.5星|《小学问》:年轻人思维与婚恋常见误区解析

“ 这项研究结果被管理学者形容为“懒蚂蚁效应”.意思是说,在一个机构中,一定要有一批这样的“懒蚂蚁”,不被日常事务性工作绑定,而将大部分时间用于“侦察”和“研究”,发现机构的薄弱之处,同时保持对外界环境的敏锐感知.说白了就是不遵常规.敢想敢干.#870” 小学问 作者: 黄执中 / 周玄毅 / 邱晨 / 马薇薇 / 胡渐彪 出版社: 北京联合出版公司 副标题: 解决你的7种人生焦虑 出版年: 2018-1 定价: 52 装帧: 平装 ISBN: 9787559613288 01 — 全书汇集各种

区块链常见误区有哪些?

区块链常见误区有哪些? 这一周,在国内区块链火到什么程度? 在国家发出号召后,公司业务部门想了解区块链相关知识,希望我们信息部门邀请专业公司讲讲课. 我们联系了合作过的四大会计事务所之一的相关专家,请他们给我们讲讲区块链. 以前,总是主动联系我们看有什么可以帮助,但是这次他们问有没有讲课费?因为请他们讲区块链的公司太多了,如果没有讲课费就不来了. 火爆是肯定的,但是火爆到“一人难求”的程度,确实令人吃惊. 那到底什么是区块链?它会给个人.企业.社会带来什么改变?人们不甚了解,甚至是存在误区. 为