怒马说EXCEL

[E0-02]数据库思维

2017-06-04  本文已影响240人  怒马2048

[E0-02]数据库思维

天依然蓝着,没心没肺。
知了依然叫着,撕心裂肺。
马路依然拥挤,繁华和你的孤单和谐相处。
打开微博纵览天下大事,打开知乎和各路精英谈笑风声,刷完微信的所有小红点你收获满满。合上手机你依然为今晚吃麻辣烫还是酸辣粉焦虑。
生活不好不坏,教程不早不晚不紧不慢持续更新着。
放下家国情怀人工智能货币政策房价涨跌,一起做点小事儿吧。比如收回狂乱思绪继续学习EXCEL:)
好消息是,我们逐步开始脱虚向实,硬的咯牙的fuck goods(干货)说来就来。呐,这篇就是。

1.定义问题

We already walked too far, down to we had forgotten why embarked.
不要因为走得太远,而忘记为什么出发。

任何思维方法论都是有场景的,牛顿的三大力学定律再牛,放到疯狂的股市投机市场照样会感叹“我能看懂星球的运转,却看不懂人性的疯狂”(大意)。之后托腮沉思皈依我佛,30岁之后就没提出啥牛逼的科研成绩了。可见思维场景有多重要。
同样,数据库思维的应用场景先要从EXCEL的不同数据表类型说起。
如果你拿EXCEL是用来当记事本写写字用的,好走不送,拜拜了您。
如果你准备用EXCEL存储数据,那么,你要知道EXCEL数据表实际分两种:

这篇文章要聊的问题核心是:针对数据源型数据表,我们都要那些规范化要求,以及这些要求背后的原因是什么?

2.何谓数据库

先来看看官方定义(来自维基百科wikipedia.org):

数据库,简单来说可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

学习数据库需要掌握哪些知识点呢,看下图(点击图片后可放大显示):

好啦,快合上你张大的嘴巴,我是吓你的。你只需要读懂下面几句话:

这是一张常见的学生信息表,横向有行,竖向有列,是二维表,没有问题。
问题是如何结构化?结构化是如何体现的?
我们再看一张图:

看出点儿门道没?这张字段定义表给刚才那张学生信息表加了限制,分别从列标题(数据库中通常称为字段,后文不做特别说明的话,列标题字段是一个意思)名称、类型、长度、是否为空做了详细限定。比如:

小结一下:针对二维数据表每一列都严格定义了约束条件的就是结构化数据表,一个或多个结构化数据表组成的文件就是数据库。

3.数据库实例

最简单的例子当属EXCEL的同门师兄ACCESS了,为了让这部分的例子不太无聊,我们开个脑洞,设想一个场景。克莱登大学著名学渣“慕容富贵”(不用怀疑,这么奇葩混搭的名字我是故意这样取的)喜欢著名学霸“诸葛狗剩”(这名字也够辛辣吧),慕容先生通过贿赂机房看门的王大爷搞到了学校管理的学生数据库数据,目前能够看到的信息是两张表,分别是学生信息表和选课信息表。数据库和数据表的大致关系以及数据表字段定义如下图所示(点击图片后可放大显示):

我们看上图,最右侧的两张截图定义了字段约束和类型信息,很容易看明白吧。注意一下学生信息表的学生编号旁边有个小钥匙图表,这个意思就是这个字段是主键,能够唯一标识所在行数据的。下面的选课信息表为什么有两个小钥匙图标呢?因为一个课程可以被多个学生选,一个学生也可以选多个课程,只有学生+课程组合在一起才能唯一标识一行记录。
我们再来看两张表的实际内容(点击图片后可放大显示):

首先看学生信息表,狗剩姑娘(好奇怪)的颜值是美若天仙,富贵小伙子没写颜值,没写……我懂了,应该不是最丑吧只能说。
再看选课信息表,注意,选课信息表的学生信息部分没有使用学生姓名而是编号,想想为什么?第一,解决了重名信息错乱问题。第二,在两张表之间建立了准确的相互引用关系。第一句话很好理解。第二句话,通过这种表格设计,我们很容易拿到各种综合查询数据。比如,列出选了高数的美若天仙的学生清单,列出狗剩姑娘都选了哪些课程等,都是一句话(SQL语句)的事情。
等一下,我们再看看第二张表,第一行第二行,第三行第四行的学生编号分别都是重复的对不对?注意,尽管重复,数据库是没有合并单元格概念的,重复就重复,大量不合适的重复通过改善表结构设计来规避,绝不允许合并单元格操作。
顺便提一句,通过上表我们发现,狗剩姑娘选了高数和建筑两门课程,嗯,书香门第的清雅姑娘。富贵同学选了生理卫生和养猪理论两门课程,哎呀我去,一股屌丝气息铺面而来,别追人家姑娘了,好好养你的猪去吧。

4.数据库思维启示录

所谓数据库思维,就是借鉴数据库对数据表的设计要求,来改善和理解EXCEL中数据源型数据表的相关规范
注意,数据库思维是两层意思。一层是理解,原来不太明白的结合数据库很容易明白;一层是改善,结合数据库要求更好的规范EXCEL数据表。
这部分我们先讲整体层面的思考结论,下一节看实操。

表格上方不要出现表标题

数据表设计要有唯一标识列

或者叫缺少主键字段,或者叫缺少ID列,一个意思。
为什么会有这个建议,只是为了单纯模仿数据库?不是的,有实际意义。

不要在原始数据表中增加任何汇总或合计行

不要合并单元格

同样的,这会破坏表结构,正确的做法是,让数据重复。保持数据适当重复时完全可以接受的,还记得前文提到的课程信息表吗?一个学生可以选择多个课程,所以学生编号重复是很正常的。
换个角度看,数据库里根本就没有合并单元格这个概念。
引申一下,斜线表头是相同道理,都是被禁止的。

不要空行空列

很简单,空行空列也许在视觉上没有问题,但在计算上会有各种问题。随便举个例子,空字段将直接导致数据透视表行标签出现空白标签。

工作表与工作簿规划

一个工作表(SHEET页)用来描述一个对象,(比如学生信息,比如学生选课信息),一个工作簿(EXCEL文件)用来描述一类数据(比如学生基础信息)。适当控制工作表之间的引用,绝对不要产生工作簿之间的引用。

字段内容原子化

每个字段的内容一定是不能再分了,比如数量如果内容是“35个”这就不是原子化,一定还能分成两列分别是数量和单位。
为什么有这个要求?一个原因是,数据库包括EXCEL中,对分散数据的拼接比准确拆分容易的多;另一个原因是,含有数量的非原子化内容比如“35个”将使得数据失去可计算性;第三个原因,原子化意味着大家都是一个粒度的(反正都已经拆到不能再拆了),而非原子化则可能有各种程度的粒度,这对数据之间的引用是非常不利的。

相同内容统一表述

比如班级名称,在所有地方同一个班级都应该是相同的表述,“天物强化班”和“天体物理学班”不应该同时出现,软件会认为是两个班级。EXCEL中应该使用数据验证下拉框规范此类问题。

特殊格式字段格式要满足格式要求

比如日期时间字段,不能既有中文又有英文,既有-又有\,这都不规范。

每列数据类型保持一致

想想看,数据表设计的时候,每列数据是不是天然一致的,比如出生日期列类型是日期,那该列数据要么是一个具体日期要么空着,绝不允许出现“不记得啦”,“丑年寅时”这种内容。

禁止空格换行等非可见字符破坏数据本身

很简单,不管是在EXCEL眼里,还是在任何一个数据库系统眼里,“西门”和“西 门”(中间加了空格)都是不同的数据,这些不可见字符会是定时炸弹,表现出各种莫名其妙的问题。比如你检索“西门”就无法检索带空格的那条记录。
有的同学喜欢ALT+ENTER强制换行或者使用空格将人名对齐,这都是不可取的。

不要批注

这一条估计不少人不太理解。我的看法是,批注内容在数据内容上是不可见的,输入的信息有没有关键信息也是不知道的,如果确实需要批准宁可建一列数据列叫做批注或者备注。

5.数据库思维实操

好,口说无凭,上文提到的那些“要与不要”你真的掌握了吗?我做了一个表作为反面典型,见下图。先不看我后面的说明,你自己来想一想这张表都有哪些不合规范的地方。

以下是思考时间






思考结束

我们先来梳理以下这张表整体存在的问题(下文问题列表需要和上图数字部分是一致的):

6.朴实的就是最好的

回到问题本身,到底什么数据是EXCEL喜欢的?
我的答案是,结构化的,类别统一的,最接近数据库表样式的就是最好的。

看看下图(标题部分不是数据表区域,别误会),简简单单的数据库表,就是最好的EXCEL数据源表了。

今日儿童节,愿你不失好奇,永远少年。
有任何反馈,随时欢迎反馈。
感谢阅读,如能转发,感谢加倍。

上一篇 下一篇

猜你喜欢

热点阅读