2024-10-23 08:22:11
数据库是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。
以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑一下这些内容可能如何组织在一起。您可以设想一个表包含员工姓名、地址和电话号码。您希望保存的其它信息可能包括工资、工资范围、上次加薪时间、下次加薪时间、员工业绩评定等内容。
这些内容是否应保存在一个表格中?几乎可以肯定不应该如此。不同类别的员工的工资范围可能没有区别;这样,您可以仅将员工类型储存在员工记录表中,而将工资范围储存在另一个表中,通过类型编号与这个表关联。考虑以下情况:
KeyLastnameSalaryTypeSalaryTypeMinMax
1Adams213000045000
2Johnson124500060000
3Smyth336000075000
4Tully1
5Wolff2
SalaryType列中的数据引用第二个表。我们可以想象出许多种这样的表,如用于存储居住城市和每个城市的税值、健康计划扣除金额等的表。每个表都有一个主键列(如上面两个表中最左边的列)和若干数据列。在数据库中建立表格既是一门艺术,也是一门科学。这些表的结构由它们的范式指出。我们通常说表属于1NF、2NF或3NF。
第一范式:表中的每个表元应该只有一个值(永远不可能是一个数组)。(1NF)
第二范式:满足1NF,并且每一个非主键列完全依赖于主键列。这表示主键和该行中的剩余表元之间是1对1的关系。(2NF)
第三范式:满足2NF,并且所有非主键列是互相独立的。任何一个数据列中包含的值都不能从其他列的数据计算得到。(3NF)
现在,几乎所有的数据库都是基于“第三范式(3NF)”创建的。这意味着通常都有相当多的表,每个表中的信息列都相对较少。
从数据库中获取数据
假设我们希望生成一个包含员工及其工资范围的表,在我们设计的一个练习中将使用这个表。这个表格不是直接存在在数据库中,但可以通过向数据库发出一个查询来构建它。我们希望得到如下所示的一个表:
NameMinMax
Tully$30,000.00$45,000.00
Johnson$30,000.00$45,000.00
Wolff$45,000.00$60,000.00
Adams$45,000.00$60,000.00
Smyth$60,000.00$75,000.00
我们发现,获得这些表的查询形式如下所示
SELECTDISTINCTROWEmployees.Name,.Min,.MaxFROMEmployeesINNERJOINONEmployees.SalaryKey=.SalaryKey
ORDERBY.Min;
这种语言称为结构化查询语言,即SQL,而且它是几乎目前所有数据库都可以使用的一种语言。SQL-92标准被认为是一种基础标准,而且已更新多次。
数据库的种类
PC上的数据库,如dBase、BorlandParadox、MicrosoftAess和FoxBase。
数据库服务器:IBMDB/2、MicrosoftSQLServer、Oracle、Sybase、SQLBase和XDB。