1.1 数据库技术的产生
随着智能手机和计算机的普及,信息技术已经融入了我们的生活,人们除了用智能终端进行网购、理财、支付、学习、聊天和娱乐外,很多人开始使用文件等信息技术来组织、保存和管理生活中的数据,例如,使用Excel工作表记录家庭财务信息,又如使用Word表格记录通讯信息,还有利用电子文档记日记等。
然而,使用工作表之类的文件技术组织和管理数据常常出现一些问题,如数据管理异常问题、数据冗余问题、数据独立性问题、数据的共享问题等,这些问题经常困扰着人们,于是数据库技术应时而生。
本节下文将以数据管理异常问题为视角,首先通过分析 Excel 工作表文件组织数据所导致的数据操作异常,说明文件技术组织和管理数据的弊端,然后通过几个示例说明如何利用数据库技术来解决这些问题,从而将数据库技术和文件技术对数据组织和管理的差异揭示出来,自然而然地告诉人们数据库技术产生的必然性。
1.1.1 文件技术组织数据的弊端
有一定计算机文化基础的人,可能觉得数据的组织和管理好像用文件技术就可以了,例如, Microsoft公司的Excel可以将数据组织成一个个的工作表,通过对工作表的有效管理,就可以将数据提供给用户分析和使用了。
这种观点,对于一些简单结构的数据来说,应该是正确的。但当数据的数据结构比较复杂的时候,就会发现文件技术组织和管理数据存在数据不一致或数据管理困难等方面的问题。下面以Microsoft公司的Excel为例,分析文件技术组织数据的一些弊端。
表1-1是一个关于销售员E-mail的简单工作表。由于这个工作表的主题很简单,所以管理也很轻松,也就是查询销售员E-mail、添加销售员E-mail、修改销售员E-mail或者删除销售员E-mail。对于这样的工作表,使用Excel之类的电子表格文件技术绰绰有余。
即使工作表中销售员E-mail行很多,也可以按“销售员姓名”这一列或按“销售员E-mail”列排序,以提高检索速度,降低管理难度。总之,使用 Excel 之类的文件技术组织和管理表1-1所示的销售员E-mail信息没有任何问题,不需要麻烦数据库技术。
表1-1 电子表格式的销售员E-mail表
如果在表1-1中增加两列,存储销售员所服务的顾客手机号码,形成表1-2,虽然仍然可以使用文件技术组织和管理,但有些操作会出现问题。
例如,假设要删除销售员张大猛的E-mail数据(如表1-2所示),那么就需要删除工作表的第5行,这时,我们会发现不仅删除了销售员张大猛的数据,也删除了顾客的姓名和电话(杨燕燕, 17788816961)。上面看到的这个删除异常问题,是Excel之类的文件技术组织数据不可避免的。
表1-2 销售员/顾客工作表的删除问题
同样,更新工作表中的值也会导致一些意外结果。例如,如果改动了表1-3中第1行的手机号码,数据就会不一致。改动后,第1行显示了顾客姜笑枫的一个手机号码,第3行却显示该顾客的另一个手机号码,这就导致了数据的不一致性。
表1-3 销售员/顾客工作表中的修改问题
执行修改操作后,工作表会导致这样的困惑:是顾客姜笑枫有两个不同的手机号码,还是两个同名顾客各有一个手机号码?这就是说,如果使用文件技术对表1-3执行更新操作,工作表中的数据可能会产生更新不一致的问题,这会让用户产生困惑,导致数据语义的不确定性。
最后,如果要给没有关联销售员的顾客添加数据,该如何做?例如顾客孙叶青没有自己的关联销售员,但是仍需要存储她的手机号码,此时就必须在工作表的销售员姓名和E-mail字段中插入空值(待定的值,不知道的值),这样就出现了值不完全的行,如表1-4所示。值不完全的行在管理、维护和使用时会带来很多问题,应尽量避免使用。
表1-4 销售员/顾客工作表中的插入问题
为什么对表1-1这样一个简单的工作表,再添加两列就会带来上述的删除异常、更新不一致和插入空值等问题呢?这难道是工作表的列数问题吗?
带着这个问题,我们又设计了一个同样具有4列的销售员/宿舍工作表,如表1-5所示。然后再分析一下对表1-5中的数据进行插入、删除和修改会不会出现操作异常。
在表1-5所示的销售员/宿舍工作表中,如果删除销售员张大猛的数据,仅会丢失与该销售员相关的数据,没有删除其他实体的数据。同样,修改销售员姜刘敏的字段值也不会带来任何更新不一致问题。最后,添加销售员马晓秀的数据也不会导致空值行的出现。
看来不是工作表列数的问题。那么又是什么原因呢?仔细观察表1-3和表1-5你会发现,表1-3组织的数据和表1-5组织的数据有一个本质区别:表1-5中的销售员/宿舍工作表中的数据是关于一个实体的,所有数据都和销售员有关,所添加的两列都是销售员这个实体的手机号码和宿舍信息。而表1-3的销售员/顾客工作表是关于两个实体的,有些数据和销售员有关,有些数据和顾客有关。
表1-5 销售员/宿舍工作表
通常情况下,只要工作表中的数据是关于两个或多个不同的实体的,修改、删除以及添加行就会出现插入、删除和修改的异常问题。
原因找到了,有的读者会说,这好办,把数据分别组织在 Excel 工作簿的不同工作表中,每一个工作表只保存一个实体的数据,问题不就解决了吗?好像这种解决方案是正确的,但很遗憾地告诉你:这种解决方案会导致新问题的出现,当把不同实体的数据分别放在工作簿的不同工作表之中后,不同实体就被割裂开来,实体之间的固有联系被人为切断,很难基于实体之间的固有联系,对不同实体的数据进行集成分析和使用。
1.1.2 数据库技术组织数据的优势
早在20世纪60年代,运用工作表之类的文件技术组织数据的弊端就被发现了,因此业界一直在寻找一种技术来组织数据以克服这些弊端,不少相关技术应运而生。随着时间的流逝,基于关系模型的数据库技术成为计算机人的选择。现在,主流的商用数据库都是基于关系模型的。基于关系模型的数据库,称为关系数据库,它的基本特征是使用关系表来组织和管理数据,本章1.3节将深入介绍关系模型的相关内容,这里只是用关系数据表来组织和管理表1-2中的数据,看看是否可以解决用工作表文件管理数据时所产生的问题。
图1-1包括两个表:seller表和Customer表。下面分析一下对图1-1中的数据进行删除、修改和插入操作是否会出现上面提到的删除异常、更新不一致以及插入空值行的问题。
图1-1 seller表和Customer表
(1)删除操作。例如从 seller 表中删除销售员张大猛的数据,只是删除了销售员张大猛的数据,他的顾客杨燕燕的数据信息仍然保存在Customer表中。
(2)修改操作。如果将顾客杨燕燕的手机号码改为13188896888,显然不会出现数据行不一致的数据,因为顾客杨燕燕的电话信息仅在Customer表中存储一次。
(3)插入操作。如果需要添加顾客孙叶青的信息,只需将她的数据添加到Customer表中就可以了。因为现在没有销售员关联顾客孙叶青,因此在seller表中不会出现空值行。
通过上面的分析,得到一个结论,使用数据库技术组织和管理数据可以解决文件技术所遇到的操作异常问题,关键的原因在于两种技术的数据组织不同:数据库技术将同一个应用系统的不同实体的数据组织在不同的表中,这些表不是孤立的,而是通过联系组织成一个整体;而Excel文件技术只能将同一个应用系统的不同实体的数据组织在同一个电子表中,如果将不同实体的数据组织在Excel的不同工作表中,实体之间的固有联系就被切断了,无法对不同实体的数据进行集成使用。
读者会提出这样的问题:将同一个应用系统中所有实体的数据分割到不同的表中时,如果用户需要访问多个表的相关信息,到底应该怎么办?还有,如果删除了Customer表中顾客杨燕燕的信息,那么 seller 表中的销售员张大猛的信息就会不完整。这又怎么办?这些问题,数据库技术都有相应的方法和机制来解决,第3章和第5章会详细讨论这些问题的解决方法和机制。
数据库技术不仅从组织结构上解决了数据管理的操作异常问题,另外也解决了文件技术不能完全实现的数据共享、数据独立性以及数据冗余等问题。有兴趣的读者可查阅相关文献,这里就不展开了。