简介 1.2 数据库系统的目的
1.2 Propose of Database Systems
? ?欲了解数据库系统之目的,以大学这一集中的教书、学生、部门和课程的相关信息为例。在电脑上维护这些信息的一种办法是降至存储在操作系统文件夹中。为了令用户可操作这些信息,系统需要一系列软件来操作文件,包括如下操作:
- 添加新学生、教师、课程。
- 将学生添加至课程中并生成花名册。
- 为学生打分、计算GPA、生成成绩单。
? ?开发者将开发满足上述要求的软件。
? ?当有新需求时,也可添加新软件至系统中。例如,假设学校决定增加一门主修课。这样,学校就要增加一个新部门创建新的长期文件夹(或者往已有文件夹里面添加信息)来记录部门内老师信息、选了课的学生、课程安排、等级要求等。学校可能需要编写新程序来处理新课程的相关规则,也可能编写新程序来处理学校中的新规则。因此,慢慢地系统将需要更多文件和程序。
? ?此类典型的文件处理系统即可适用于传统操作系统。系统在多个文件夹中存储长期记录,同时还需要不同程序从正确的文件夹中提取和添加记录。
? ?在文件处理系统中维护数据有如下缺点:
-
数据冗余和不一致:因为长期开发中不同码农会新建文件和写新程序,不同文件很可能有不同结构,程序也可能是以好几种编程语言写的。此外,同一信息可能会被复制到好几个地方(文件夹)。例如,如果一个学生有两门主修(假设是音乐和数学),该生的电话和地址就有可能既出现在音乐学院中有关该生信息的文件夹中又出现在数学学院的相关文件夹中。这种冗余将导致更高的存储和访问开销。这还可能导致数据不一致性;即同一数据的不同副本可能不再一直。如,音乐学院中某学生地址改变了,其他地方的相关信息则没有。
-
访问数据困难:当某学校工作人员需要找到所有住在某个特定邮编地区的学生时,该工作人员将请求数据处理部门生成一个列表。因为原始系统的设计者并未考虑到如此请求,所以就没有可用程序能完成该需求。然而,有程序能生成所有学生的列表。学校工作人员现在有两种选择:要不获取所有学生名单再手动抽取需要信息,要不就要求码农写一个必要的程序。这两种选择显然都不令人满意。假定写了一个新程序,几天后,该工作人员又需要在这个表里找到上满了60个学时及以上的学生。同样的,没有程序能满足该操作。所以工作人员又面临了先前的两种选择,哪一种都不咋地。
? ?此处的关键在于传统文件处理环境不支持方便快捷地检索目标数据。为了更好用,就需要有响应更快的数据检索系统。 -
数据隔离:因为数据分散在不同文件,文件可能是不同格式,所以编写新程序检索正确数据是困难的。
-
完整性问题:数据库中存储的数据必须满足某些一致性约束条件。假设某学校为每个学院开了一个账号,每个账号都具有账户余额。同时假设学院账户余额不低于0。开发者通过在不同应用程序中添加代码的方式使系统满足约束。然而,当新的其他约束再加进来的时候,就很难再改变程序来满足约束。当涉及到不同文件中的不同数据项时,该问题是很复杂的。
-
原子性问题:如其他设备一样,计算机系统也会发生故障。在许多应用程序中,如果发生故障,能将数据恢复到故障之前存的一致状态至关重要。以银行系统中某程序为例,其将A账户中的500元转至B账户。如果在程序运行过程中系统发生故障了,很可能出现这样的情况:A账户中的500元已经被减去了,但是并没有转到B账号中,从而导致了数据库状态不一致。显然,数据库一致性要求贷记和借记都发生或者都不发生。即资金转账必须是原子的,要么全部发生要么都不发生。在传统的文件处理系统中,保证原子性是很难的。
-
并发访问异常:为了系统的整体性能和快速响应,许多系统都允许多用户同时更新系统。确实,在现今而言,最大电商每天可能有上百万顾客访问数据。如此情况下,并发的更新操作是可能的,也可能导致数据不一致。以账号余额为10000的账户A为例。若两个银行员工几乎同时借记A账户余额(假设是500和100),并发操作的结果可能使得账号余额处于不正确(即不一致)的状态。假设每次提款时执行的程序读取旧余额,将该值减去提款金额,并将结果写回。若两程序同时运行,他们可能同时读取了1000,并分别写回9500和9900。此时账户A的余额即取决于谁后写回,可能是9500或9900,而不是正确的9400。为了避免这种可能性,系统必须包含某种监管手段。但监管是困难的,因为可能有许多以前未曾协作过的应用程序同时访问数据。
? ?又如,假设某注册程序维护一注册某课程的学生名单,且注册学生数量有上限。当一学生注册时,程序读取所有课程的注册学生数,并确认数目未达上线,再将数目加一,并将该数目存回数据库。假设2个学生在注册数目是39时同时注册。两程序可能同时读取39并同时写回40,这将导致数目仅仅加1,但是两个学生都同时成功注册该课程且数目应当是41。另外,假设课程注册数上限是40;上例中两名学生都可注册,即超出了40个学生的上限。 -
安全问题不是所有数据库系统的用户都可以访问所有数据。例如在某大学,薪资人事部只能看到有关于金融信息的部分数据库。他们不需要访问有关于学业相关的信息。不过由于应用程序以一种特殊的方式添加到文件处理系统中,因此很难实施这种安全约束。
? ?在1960s和1970s,所有这些困难促使了数据库系统的早期发展,并使之由基于文件的应用程序转向数据库系统。
? ?接下来,我们将学习一些使得文件处理数据库系统能处理这些问题的概念和算法。本书的主要部分,都将使用某大学作为典型数据处理应用的实例。