数据库类型
有很多数据库设计的格式,但这里要考虑的两种最常见的格式是平面文件和关系数据库。1
平面文件数据库平面文件数据库(Flat file database)以定界的方式存储数据,可以将其解释为单一数据流。平面数据库在数据之间使用定界符,如逗号等。平面文件数据库在需要时会变的非常大;然而,在试图添加、删除或修改其中的任何数据时, 单一数据流会变得效率很低:平dd文件数据库一般用作以文本文件的形式将数据从一处移动到另一处的简单解决方案。有些公司仍然将平面文件数据库用于产品而不是工具,但是这种情况已经不普遍了。平面文件数据库的一个严重缺点是没有能力管理请求。例如,平面文件数据唪在多个命令正好同时提交时必定要失败。
关系数据库关系数据库(Relationai database)是我们在上面的文件柜与数据库的比较中讨论的那种数据库类型。如果考虑牙医诊所的例子,那么表格就相当于文件柜的抽屉,因此,诊所中可能有——个称为“患者”的表格,其中含有数据字段如患者编号、姓名和保险等。每行当中的数据应该是这样的:PatientstablePatientID FirstName LastName PhoneRvanJoeO'KeefeSchome555-394-0293 WeCareHMO394-983-0000 Discount Care Providers
关系数据库的功能可以从其名字中得到暗示:关系。每一行或每个表格都可以与其他表格链接,或是相关,因此消除了重复数据的必要。在上面的例子中,想添加包含主要保险患者时如何做呢?如果大家说“简甲,只要将他们添加到具有相同保险公司的患者表格中就行了”,这样就没有使用关系数据库的功能。很可能主保险人与其被保险人有关系,如配偶或子女只有共同的电话号码和地址。为什么还要重复电话号码和地址数据昵?如果创建另一个称为dePatients的表格并且与Patients表格的PatientlD相关,那么就可以将dePatients中的数据与Patients表格中的记录相关联。
现在,可以查询患者(和任伺相关患者),而且能够得到相同的电话号码和保险数据,因为这两个表格是连接起来的。另外,可以在需要时添加或删除任何相关患者而不会影响主患者的记录。这种关系的键是Patients表格中的数据字段PatientslD。这个字段必须是惟一的,否则,关系就没有作用。这个惟一的值被称为主键(primary key)。可以为一个表格指定一个数据宁段为主键,而这个主键保证了这些数据字段中内容不重复。在上面的例子中,Patients表格的PatientslD是主键,而每个patientlD唯一标识了Patients表格中的汜录。如果尝试插入重复的值到标汜为主键的数据卞段中,就会返回错误。
上图中的关系数掘库中的另外一个键是外来键(foreignkey),外来键值连接到其他表格中的主键值。外来键中的值与正在连接的主键中的值相同。这种关系创建了两个记录之间的相关性。如果dePatients中的记录与Patients表格中的记录相关(由于外来键关系),则在Patients中的记录不能被删除。这点很重要,因为如果Patients表格中的记录被删除而它与dePatients中的记录有外来键关系,则dePatients中的记录将成为孤值并与任何内容无关。
平面文件数据库模型在像Oracle和Microsoft这样的提供商开发出能够运行在计算机上的数据库管理系统之前,许多公司都是通过主机上的普通文件来保存数据的。尤其在大型机时代,使用普通文件来存储数据占主导地位。2
平面文件数据库由一个或多个可读文件组成,这些文件通常按照文本的格式保存。这些文件中的信息按域来保存,这些域可以有固定长度,也可以是变长的,并且域之间通过一些符号(分界符)来分隔。
域下面所示的就是一个普通文件,其中域具有固定宽度:
1234 Ernest Hemingway For Whom the Bell Tolls
5678 Charles Dickens Great Expectations
4321 Ernest Hemingway A Farewell to Arms
8765 Jack London White Fang
4123 fack London Call of the Wild
3456 Mark Twain Adventures of Huckleberry Finn
在这个例子中,很明显有三个域:标识数、作者名称以及图书名称。每一个域都有固定时长度,如:标识数由4位数组成,它占用4列的长度,而作者名称最多有20个字母。
下面所示的是由特定的分界符来分隔域长度是变长的普通文件:
1234:Ernest Hemingway:For Whom the Bell Tolls
5678:Charles Dickens:Great Expectations
4321:Ernest Hemingway:A Farewell to Arms
8765:Jack London:White Fang
4523:Jack London:Call of the Wild
3456: Mairk Twain:Adventures of Huckleberry Finn
在这个例中,三个域之间是通过“:”来分隔的,而且域的宽度是可变的。如果使用分界符来分隔域,就必须保证分界符不会出现在数据中。
注意: 有时候,普通文件也可以用来在数据库之间进行数据移植,尤其是在关系数据库之间。
由于不同的公司需要存储不同的数据且具有不同的数据需求,因此每一个平面文件数据库系统都是各不相同的。创建一个平面文件数据库并存储数据后,应该设计检索数据、创建新记录、更新记录以及删除记录的方法。例如,如果要查询所有作者是Jack London的作品的名称,就必须以“Jack London”为关键字遍历所有的记录。此外,还应该过滤数据,也就是只查询普通文件中的第3列数据。
缺点在普通文件中,访问数据的问题是必须设计一系列的程序来查询存储在普通文件中的信息。如果没有这些方法,用户或客户就必须自己来查询这些文件,这显然是不能接受的。平面文件数据库系统最主要的问题就是:不但要掌握这些普通文件的结构,还要知道这些数据的物理存储位置。此外,这种数据库系统还可能会需要大量的普通文件,因为相关数据可能会保存在不同的文件中。在平面文件数据库环境中,对数据联系的管理是一项非常困难的任务。
如下所列的是平面文件数据库系统存在的缺点:
·普通文件无法提供便于数据关联的结构。
·不能有效地管理数据并保证数据的准确性。
·通常必须存储冗余数据,这导致了准确维护数据的额外工作量。
·必须知道文件中数据域的物理存储位置。
·必须设计管理数据的程序。
设计平面文件(Flat File)数据库设计关系数据库之前,我们先来了解一下平面文件数据库。设计平面文件数据库是一个相对简单的过程。因为真正的平面文件数据库不支持文件之间的信息共享,需要为想在数据库中追踪的所有内容定义字段。
例如,如果要在一个名为“发货单”的文件中包含客户信息,除了已在“发货单”文件中定义的字段之外,还需要定义客户名称、地址、城市、州和邮政编码字段。如果想在该文件中包含产品信息,除了已定义的字段之外,还需要定义产品名称、颜色、尺寸(或其他属性)和价格字段。
平面文件数据库可能包含大量字段,在很多情况下包含大量重复数据,比如:客户名称或产品名称。
设计平面文件数据库简单到只需决定想要追踪的数据,并为每个数据创建一个字段即可。图 1 显示了为了追踪向客户销售产品的情况而在简单的平面文件数据库中定义的字段。
接下来,需要考虑如何将信息从一个数据库传输到另一个数据库。FileMaker Plus 的发布带来了一项名为“查找”的新功能。强大的“查找”功能可让您将一个文件中的数据拷贝粘贴到另一个文件。
在“发货单”文件示例中(图 2),“查找”功能要求您定义“发货单”文件中的客户信息字段,然后可将客户信息字段指定为“查找”字段。这样,根据两个文件中同时包含的某字段中的匹配值,您可将“客户”文件中的数据拷贝粘贴到“发货单”文件中。
更改“客户”文件中的数据时,“发货单”文件中的数据不会自动更改。要更新所做的更改,必须使用“重新查找”命令。因此,如果一个客户更改了地址,可使用“重新查找”命令来更新该客户地址的所有匹配项。如果更改了“发货单”文件中的客户数据,也要通过这种并不简单的方式更新“查找”文件中的数据。
“查找”使平面文件数据库更为实用和强大,让数据输入更快速、更准确。借助该功能,可以将围绕一个共同主题的数据拆分到不同的文件中。
平面文件数据库的实现平面文件数据库是非常简单的数据库模型,利用纯文本文件存储信息,文件中的每行代表一条记录,每条记录由分割的字段或固定列组成。与复杂的模型如关系型数据库比较,平面文件数据库好似写着记录的一张纸。
让我们探索下各阶段的文件数据库。
第一阶段: 纯文本下面是以最简单的文本内联方式实现,以表格的形式展示数据:
所有的这些实现都是等效的。但是对于这种纯文本的方式,仅仅能满足用户基本的需求,下面让我来介绍一款专门为工作而设计的工具。
- 第二阶段:ExcelMicrosoft Excel是一个简单的数据库工具,数据按照行和列进行组织,首行来表示字段名称。
Excel为使用者提供了排序功能,如果按照用户分组升序排序:
排序后可以发现蓝队在前,红队在后。
任意列都可以排序,Excel设计初衷是用来解决复杂数值计算的电子表格工具。 假设用户表增加了“分数”字段,如果想对分数字段计算总和、平均值和标准差,那么Excel是再合适不过了。
- 第三阶段:FileMakerFileMaker是真正意义上的数据库管理工具。
数据展示
FileMaker以行列形式展示数据,首行表示字段名称,下面是列表的展示方式:
如果数据库字段很多,使用表单查看数据详情可能更方便一些:
数据本身不会改变,改变的只是数据查看的方式,除了默认的展示方式,还可以自定义设计展示。
排序
FileMaker提供了更高级的排序功能,可以对多个字段正序、倒序或者依据某一给定序列排序。
基于用户组排序:
与Excel排序后的结果一致。
查找
FileMaker提供了查找功能,可以基于某个字段进行查找,例如查找名为“Fred”的用户:
通过查找锁定了用户“Fred”:
还可以进行更复杂的操作,例如搜索Blues用户组,同时按照用户名排序。
定义字段
在现有的数据库中可以添加额外的字段,同时设置用数据类型。
除此之外,还可以定义更复杂的操作。
- 以往实现计算机的第一个用途就是用作数据库。
Herman Hollerith认为用一个80位数字和字母混合的字符串,可以存储美国居民的身份信息,为了使数据排列整齐,使用空格填充。 美国人口普查局至今珍藏着Herman Hollerith打卡机。1890年人口普查记录是第一个计算机化的数据库,数以千计装着打孔卡的盒子做为存储的介质。
原始计算机主要是政府和公司使用,仅仅做为平面文件数据库使用,最典型应用的就是会计领域,如工资单。 但是,很快,平面文本数据已经满足不了用户更复杂的需求,促使了关系型数据库的产生。
20世纪80年代,可配置的平面文件数据库广泛的应用在DOS和MAC操作系统中, 这些数据库设计的宗旨是易于个人设计和使用数据库,当时的流行程度不亚于word和excel。
- 当代实现今天,帮助新手创建和使用平面文本数据库的软件微乎其微,相关功能已经集成于操作系统中。 随着时间的推移,出现了关系功能的数据库,例如Borland的Paradox和Microsoft的Access。 许多计算机应用程序一直使用平面文件数据库存储配置数据,有些小程序本质上使用的就是平面文件。
XML是广泛使用的文件格式,支持数据类型的定义、复杂数据结构的定义,以纯文本的方式存储数据。