1、什么是数据库
典型的数据库是关系型数据库,最简单的关系型数据库可以理解为一张结构化二维表格。
什么是结构化二维表格?有列(或者叫标题,列标题,是一个意思)有行(至少有一行数据)就是二维表格。如果对每一列数据都进行了完整定义,那就是结构化二维表格。
这是一张常见的学生信息表,横向有行,竖向有列,是二维表,没有问题。问题是如何结构化?结构化是如何体现的?我们再看一张图:
这张字段定义表给刚才那张学生信息表加了限制,分别从列标题(数据库中通常称为字段,后文不做特别说明的话,列标题字段是一个意思)名称、类型、长度、是否为空做了详细限定。
小结一下:针对二维数据表每一列都严格定义了约束条件的就是结构化数据表,一个或多个结构化数据表组成的文件就是数据库。
2、数据库思维
所谓数据库思维,就是借鉴数据库对数据表的设计要求,来改善和理解EXCEL中数据源型数据表的相关规范。注意,数据库思维是两层意思。一层是理解,原来不太明白的结合数据库很容易明白;一层是改善,结合数据库要求更好的规范EXCEL数据表。这部分我们先讲整体层面的思考结论,下一节看实操。
(1)表格上方不要出现表标题
第一,数据库表设计从来没有表标题的概念,更加不可能在数据区域出现表标题;
第二,表标题占用了列标题行,会对后续分析造成很大的干扰;
第三,表标题信息可以体现在sheet名称中。
(2)数据表设计要有唯一标识列
或者叫缺少主键字段,或者叫缺少ID列,一个意思。为什么会有这个建议,只是为了单纯模仿数据库?不是的,有实际意义。
保证你对源数据可以随时恢复的能力。不管你是排序筛选各种对行顺序的折腾,最后只要按照ID列做一次排序就回来了。
大幅度减少查询难度。我们知道EXCEL对查询的支持时比较弱的(和数据库比查询简直没法比),通过添加ID列并且让ID列放在最左边应用VLOOKUP取数据会简单很多。
作为辅助列配合工具将**复杂多列二维表**转化为**简单列二维表**,这种做法的细节后文会详述。
养成一个每行有唯一标识字段的良好意识。相信我,很多困扰使用者的重名问题,多条件查询问题,逆序查询问题,往往一个ID列就可以解决。
(3)不要在原始数据表中增加任何汇总或合计行
根据原因是,这样做会破坏原来结构化的数据分布,让部分数据不再是规整的了,想想看如果在学生信息表的最后一行加一个学生总数=110的汇总,那这个110到底是属于哪个现有字段的?
(4)不要合并单元格
同样的,这会破坏表结构,正确的做法是,让数据重复。保持数据适当重复时完全可以接受的,还记得前文提到的课程信息表吗?一个学生可以选择多个课程,所以学生编号重复是很正常的。换个角度看,数据库里根本就没有合并单元格这个概念。引申一下,斜线表头是相同道理,都是被禁止的。
(5)不要空行空列
很简单,空行空列也许在视觉上没有问题,但在计算上会有各种问题。随便举个例子,空字段将直接导致数据透视表行标签出现空白标签。
(6)工作表与工作簿规划
一个工作表(SHEET页)用来描述一个对象,(比如学生信息,比如学生选课信息),一个工作簿(EXCEL文件)用来描述一类数据(比如学生基础信息)。适当控制工作表之间的引用,绝对不要产生工作簿之间的引用。
(7)字段内容原子化
每个字段的内容一定是不能再分了,比如数量如果内容是“35个”这就不是原子化,一定还能分成两列分别是数量和单位。为什么有这个要求?一个原因是,数据库包括EXCEL中,对分散数据的拼接比准确拆分容易的多;另一个原因是,含有数量的非原子化内容比如“35个”将使得数据失去可计算性;第三个原因,原子化意味着大家都是一个粒度的(反正都已经拆到不能再拆了),而非原子化则可能有各种程度的粒度,这对数据之间的引用是非常不利的。
(8)相同内容统一表述
比如班级名称,在所有地方同一个班级都应该是相同的表述,“天物强化班”和“天体物理学班”不应该同时出现,软件会认为是两个班级。EXCEL中应该使用数据验证下拉框规范此类问题。
(9)特殊格式字段格式要满足格式要求
比如日期时间字段,不能既有中文又有英文,既有-又有\,这都不规范。
(10)每列数据类型保持一致
想想看,数据表设计的时候,每列数据是不是天然一致的,比如出生日期列类型是日期,那该列数据要么是一个具体日期要么空着,绝不允许出现“不记得啦”,“丑年寅时”这种内容。
(11)禁止空格换行等非可见字符破坏数据本身
很简单,不管是在EXCEL眼里,还是在任何一个数据库系统眼里,“西门”和“西 门”(中间加了空格)都是不同的数据,这些不可见字符会是定时炸弹,表现出各种莫名其妙的问题。比如你检索“西门”就无法检索带空格的那条记录。有的同学喜欢ALT+ENTER强制换行或者使用空格将人名对齐,这都是不可取的。
(12)不要批注
这一条估计不少人不太理解。我的看法是,批注内容在数据内容上是不可见的,输入的信息有没有关键信息也是不知道的,如果确实需要批准宁可建一列数据列叫做批注或者备注。
3、朴实的就是最好的
回到问题本身,到底什么数据是EXCEL喜欢的?我的答案是,结构化的,类别统一的,最接近数据库表样式的就是最好的。
第一行是标题行。风雨无阻,第一行一定是标题行。
第一列是ID列。尽管不是强制要求,但我强烈建议你这么做。
每列数据不可拆分,已经原子化。每列数据类型相同,格式规范。
拒绝合并单元格,拒绝斜线表头,拒绝空行空列。
没有空行空列。
看看下图(标题部分不是数据表区域,别误会),简简单单的数据库表,就是最好的EXCEL数据源表了。