什么是数据库?

数据库,顾名思义,即数据仓库。和水库储水、粮库存粮一样,数据库存储数据。

一般较正式的定义是:

数据库是一个以某种有组织的方式存储的数据集合。

由此可明确两点:

1、数据库是一个数据集合;

2、数据库中的数据以某种有组织的方式存储。

● 什么是数据集合?

通俗地理解,就是一个或多个文件。数据库以文件的形式在电脑上存在,数据就保存在这些文件当中。当我们在电脑上创建了一个数据库并存入数据,特定文件夹下就生成了相应的文件。

在这一点上,数据库和电脑上的其他文件没什么区别,所有的文件都能存储数据,或者说所有的文件都是数据的打包封装。比如以MP4文件存储一部电影,比如以TXT或WORD文件记录一段文字。

● 数据库以何种方式存储数据?

即如何解决数据库中数据的存放问题。当我们讨论某个问题的解决方式时,有必要先了解问题产生的背景,以及问题解决的期望值。

20世纪60年代,随着计算机技术的发展,人们越来越多地使用计算机进行数据管理,随之而来的是信息量的爆发式增长,传统的数据管理方式劣势渐显,无法满足需求,人们开始寻求一种新的方式对数据进行管理,数据库由此诞生。数据库存在的意义,或者说人们对它的期望值,就是更高效地对数据进行增删改查,而其核心就是“查”。所以我们讨论数据库以何种方式存储数据,实际上是讨论如何更高效地从数据库获取数据,用什么样的思维去解决查询效率问题。

那么,如何更高效地获取数据?举个例子:

你是改革开放初期的大学生,毕业后到一家刚成立几年的的民营企业工作,具体负责人事档案管理。你的上一任是公司老板的二大爷,公司成立之初就过来帮忙,精神可嘉但能力不足,留下的人事资料还没公司里的八卦大姐知道的多。所以要把你的工作做好,就必须收拾这个烂摊子,但这显然难不倒你。

首先是人员信息的收集。既然现有的资料几乎为零,那就得重新收集,对此你并非毫无经验,求学路上你被收集过无数次信息、填过无数份表格,收集资料对你来说轻而易举。你依葫芦画瓢设计了一张《人员信息表》,尽可能全地收集公司员工的各类信息,包括个人基本信息和工作相关的其他信息,比如从业经历、职业技能、获奖信息等等。公司领导对你的工作高度重视,不到三天,100名员工的个人资料一份不少地回到了你的办公桌上,一式三份,整整齐齐。

之后是人员信息的管理。你深知这些这些资料的重要性,必须对其妥善保管。你把每个人的资料都装到单独的档案袋里,袋子上注明部门和姓名,并按部门归类、姓名首字母排序,存放到文件柜里。这样以后如果要查这些档案,只要知道部门和姓名,就能准确找到某个人的资料,比如先找到“市场部”的存放位置,再按姓名首字母顺序找到“张三”。同样地,如果要补充或更新资料,找到相应的档案袋,对里面的表格进行修改或放入新的资料即可;如果有新员工,则为其建立一份新的档案,按规则存放到相应位置;如果人员离职了,则找到档案袋并销毁。

公司的人事档案管理工作终于步入正轨,告别了“口口相传”的时代。你的工作虽然不能给公司带来直接收益,但却是公司运转的隐形助力,各部门同事都非常认可你的工作,开始和你有各种交集:

公司员工的各项考核结果,由你记入档案,与后续各种奖惩挂钩;

公司准备培养青年干部,领导安排你筛选并提供资料以便后续考察;

公司工会准备每月组织当月过生日的同事一起庆生,生日信息需要你提供……

面对这些需求,开始你得心应手,但随着公司的不断发展壮大,各种问题也随之而来:

一是公司人员规模的扩大,原先的100人增加到了500人,信息量是原来的5倍,工作量自然也是成倍增加;

二、纸质档案保管、更新、流动困难;

三是各类需求的复杂性和及时性,比如需要统计公司30岁以下、大专以上学历、连续三年绩效B以上且有2年以上销售类工作经验的本地男性员工,第二天就要。面对这类需求,要么让大家自己报,要么你拆开档案一份份找,而每次都让大家自己报显然不能体现你的价值,所以你只能在昏暗的灯光下一边翻着档案,一边思考人生……

你向老板申请加人,而你的老板更是高瞻远瞩,不但加了人,还给你配了刚开始普及的电脑。你天赋异禀,迅速上手,并且很快就明白电脑不过是人脑的延伸,能更高效地代替人类执行各种复杂的重复性操作,其操作思维本质上还是人类思维,特别是文件管理系统。你联想到,如果把现实中的文件柜比作一个根文件夹,那么里面存放不同部门资料的格子就是子文件夹,格子里的每个档案袋就是下一级子文件夹,档案袋里的文件就对应电脑上的文件。所以使用电脑进行人事档案管理,完全可以看成是现实规则和操作的虚拟化、电子化,并不难理解,其他同事在你的指导下也很快上手。

电脑和新人的加入,很大程度上解决了工作量的问题,也解决了档案保管、更新、流动难的问题,而最主要的问题还是信息的查找。根据之前的经验,你和你的同事把所有人的资料都录入了电脑,每人一个文件夹,不同的是,你们利用文件管理系统的多层文件夹特性,把员工档案做了更细致的分类。第一层按部门分,第二层按性别分,第三次按年龄分,第四层按学历分,第五层……这样再有类似之前那样的需求,很快就能筛选出公司30岁以下大专学历以上的男性员工,再做进一步筛选即可,原来需要500份资料全看,现在只需要看100份,效率有所提高。

鉴于你的出色表现,老板决定把你调到市场部负责客户档案管理工作,档案量由500份增加到了10000份,而此前这些档案需要100名客户经理分别管理。

当信息量达到某个级别时,单纯靠“人海战术”来处理就显得杯水车薪了,而利用多级文件夹归类,似乎也不太高明。首先,假设每个客户有30项个人信息,按客户等级、地区、性别、年龄等分N层文件夹归类,如果N小了,则剩余30-N项信息未归类,仍然不好查找;如果N大了,则文件夹层数太多,打开一个文件需要N次判断。其次,客户的各项信息之间并没有绝对的从属关系,比如地区和性别,可以先按地区分,也可以先按性别分,在不同的搜索条件下各有利弊,而一旦分好了就很难改动。

你开始思考如何更高效地“万里挑一”,快速查到想要的客户信息。你总结出三点:

一、万物都具有属性,任何事物都能被有限个属性所描述,任意两个事物都能通过有限个属性来区分,比如人的性别、年龄、籍贯,汽车的厂家、型号、颜色等等。

二、事物的每个属性对应的值都用约定好的格式描述,比如性别统一分男和女,不用公和母、雄和雌;

三、事物的各项属性之间应当是平行结构,而不是树形结构,每项属性都可以独立筛选。

概念大致如图:

每位员工都有8个属性(姓名、性别、年龄、籍贯、身高、体重、教育程度、政治面貌),每个属性都并列平行,属性对应的值都用约定的格式描述。习惯上把竖的一排格子称为列,横的一排称为行,行和列交叉组成的网称为表。一个文件夹或者数据集合里可以存放多张表;同一类事物具有相同的属性,可以记录在同一张表里;不同类的事物属性不同,需要再设计另外一张表。表中每个属性都对应一列,每个员工的信息都占据一行,通过对不同列(属性值)的筛选,排除掉不符合条件的行,留下目标行。

当然这些概念并非你首次提出,无数苦难同行前辈早已做了类似的总结,提出了“数据库”的概念,并开发了相应的管理软件。你们公司的数据管理在经历了人工管理、文件系统管理之后,正式进入了数据库时代。

这就是最简单的关系型数据库的概念:

万物皆对象

→对象皆有属性

→属性相对独立且必有值

→合理利用属性(列)和值(行)的二元对应关系,设计成表

→若干个表组成库。

万物皆可入库。