1.实体、属性
客观世界的万事万物在数据库领域内被称为实体(entity)。实体可以是实实在在的客观存在,例如工人、学生、商店、医院;也可以是一些抽象的概念或地理名词,如哮喘病、上海市。实体的特征(外在表现)称为属性(attribute),属性的差异能使我们区分同类实体。如一个人可以具备下列属性:姓名、年龄、性别、身高、肤色、发式、穿着等,根据这些属性我们能在熙熙攘攘的人群中一眼认出所熟悉的人。
实体本身并不能被装进数据库,要保存客观世界的信息,必须将描述事物外在特征的属性保存在数据库中。例如,要管理学生信息,可以储存每一位学生的学号、姓名、性别、出生年月、出生地、家庭住址、各科成绩等,其中学号是人为添加的一个属性,用于区分两个或多个因巧合而属性完全相同的学生。在数据库理论中,这些学生属性的集合被称为实体集(entity set),在数据库应用中,实体集以数据表的形式呈现。
2.联系
客观事物往往不是孤立存在的,相关事物之间保持着各种形式的联系方式。在数据库理论中,实体(集)之间同样也保持着联系,这些联系同时也制约着实体属性的取值方式与范围。下面以“系”表和“导师”表为例进行说明,如表1.1和表1.2所示。
表1.1 “系”表 表1.2 “导师”表
表1.1 “系”表 |
|
导师编号 |
姓名 |
性别 |
职称 |
系编号 |
||
系编号 |
系名 |
电话 |
|
101 |
陈平林 |
男 |
教授 |
D02 |
D01 |
计算机系 |
34358750 |
|
102 |
李向明 |
男 |
副教授 |
D01 |
D02 |
社科系 |
76853212 |
|
103 |
马大可 |
女 |
研究员 |
D03 |
D03 |
生物系 |
86238931 |
|
104 |
李小严 |
女 |
副教授 |
D02 |
假如问及李小严在哪个系任教,可以检索“导师”表的“姓名”属性,得到李小严的系编号是“D02”。至于“D02”究竟是何系,就必须再查阅“系”表,得知“D02”代表社科系。这个例子说明,实体集(数据表)之间是有联系的,“导师”表依赖于“系”表,“系编号”是联系两个实体集的纽带,离开了“系”表,则导师的信息不完整。在数据库技术术语中,两个实体集共有的属性称为公共属性。
3.实体的联系方式
实体的联系方式通常有3种:一对多、多对多和一对一。
(1)一对多
这是关系型数据库系统中最基本的联系形式,上面例子中的“系”表与“导师”表这两个实体的联系方式就属于“一对多”关系,即一个系可以有多名导师,但一名导师只能属于一个系。如果一个公司管理数据库中有“部门”表和“职工”表两个实体集,则两个表之间的关系也是“一对多”,也就是一名职工只能隶属于一个部门,而一个部门则可以有许多名职工。
(2)多对多
“多对多”联系类型是客观世界中事物间联系的最普遍形式,实际生活中“多对多”联系的实例可以说俯拾即是,例如:在一个学期中,一名学生要学若干门课程,而一门课程要让若干名学生来修;一名顾客要逛若干家商店才能买到称心的商品,而一家商店必须有许多顾客光顾才得以维持;一个建筑工地需要若干名电工协同工作才能完成任务,反之一名电工一生中需要到许多个工地工作等。上述的例子中,学生与课程之间、顾客与商店之间、电工与建筑工地之间的关系均为“多对多”联系。
在数据库应用中,“多对多”联系形式无法直接表达,必须通过第3个实体(亦称复合实体)实现。例如,要说明每位电工在各个工地的工作量,必须涉及“职工”表、“工地”表和“工作量”表,分别如表1.3、表1.4和表1.5所示。
表1.3 “职工”表 表1.4 “工地”表 表1.5 “工作量”表
|
|
|
|
|
表1.4 “工地”表 |
|
职工号 |
工地编号 |
工作量 |
|||
表1.3 “职工”表 |
|
工地编号 |
名称 |
位置 |
… |
|
M01 |
HK03 |
80 |
|||
职工号 |
姓名 |
工种 |
… |
|
HK03 |
临江花园 |
虹口 |
… |
|
M01 |
PT17 |
73 |
M01 |
柳成荫 |
电工 |
… |
|
ZB21 |
桃源新苑 |
闸北 |
… |
|
M02 |
HK03 |
103 |
M02 |
马里 |
电工 |
… |
|
PT17 |
兰亭小区 |
普陀 |
… |
|
M02 |
ZB21 |
98 |
|
… |
|
|
|
|
… |
|
|
|
M02 |
PT17 |
82 |
在“工作量”表中,“职工号”属性来自“职工”表,“工地编号”字段来自“工地”表,两者均是公共属性。
(3)一对一
“一对一”情况较为少见,它表示某实体集中的一个实体对应另一个实体集中的一个实体,反之亦然。例如为补充系的信息,添加一个“系办”表,表示每个系的系部办公室地点。从常识得知,一个系只有一个系部办公室,反之一个系部办公室只为一个系所有,如表1.1和表1.6所示。
由于“系”表与“系办”表中的每一行是一一对应的,因此可省略“系编号”属性。实际应用中,更多的是将两表合二为一,如表1.7所示。
表1.6 “系办”表 表1.7 “系”表
地 点 |
|
|
|
|
系编号 |
系 名 |
电 话 |
地 点 |
勤学楼301 |
|
|
|
|
D01 |
计算机系 |
34358750 |
勤学楼301 |
奋进楼503 |
|
|
|
|
D02 |
社科系 |
76853212 |
奋进楼503 |
育新苑101 |
|
|
|
|
D03 |
生物系 |
86238931 |
育新苑101 |
从数据库的逻辑结构角度,可以对数据库中的实体类型、实体间关系以及数据的约束规则进行抽象,归纳出3种数据模型,分别是层次模型、网状模型和关系模型。
1.层次模型
在层次模型中,实体间的关系形同一棵根在上的倒挂树,上一层实体与下一层实体间的联系形式为一对多。现实世界中的组织机构设置、行政区划关系等都是层次结构应用的实例。基于层次模型的数据库系统存在天生的缺陷,它访问过程复杂,软件设计的工作量较大,现已较少使用。
2.网状模型
网状数据模型也称网络数据模型,它较容易实现普遍存在的“多对多”关系,数据存取方式要优于层次模型,但网状结构过于复杂,难以实现数据结构的独立,即数据结构的描述保存在程序中,改变结构就要改变程序,因此目前已不再是流行的数据模型。
3.关系模型
关系模型自1970年被提出后,迅速取代层次模型和网状模型成为流行的数据模型。它的原理比较简单,其特征是基于二维表格形式的实体集,即关系模型数据库中的数据均以表格的形式存在,其中表完全是一个逻辑结构,用户和程序员不必了解一个表的物理细节和存储方式;表的结构由数据库管理系统(DBMS)自动管理,表结构的改变一般不涉及应用程序,在数据库技术中称为数据独立性。
例如,“导师”表中“姓名”字段原来可以容纳3个字符(在Unicode编码中,一个字符既可以表示一个英文字符,也可以表示一个汉字),随着外籍教师的引进,原来的“姓名”显然无法容纳一个西文的名字,于是将其扩展到20个字符,但相应的数据库应用程序却无须作任何改动。
基于关系数据模型的数据库系统称关系数据库系统,所有的数据分散保存在若干个独立存储的表中,表与表之间通过公共属性实现“松散”的联系,当部分表的存储位置、数据内容发生变化时,表间的关系并不改变。这种联系方式可以将数据冗余(即数据的重复)降到最低。目前流行的关系数据库DBMS产品包括Access、SQL Server、FoxPro、Oracle等。
在关系型数据库中,数据以表的形式保存,表有以下的特点:
(1)表由行、列组成,表中的一行数据称为记录,一列数据称为字段。
(2)每一列都有一个字段名。
(3)每个字段只能取一个值,不得放入两个或两个以上的数据。例如导师表的“姓名”字段只能放入一个人名,不应该同时放入曾用名,在确实需要使用曾用名的场合,可以添置一个“曾用名”字段。
(4)表中行的上下顺序、列的左右顺序是任意的。
(5)表中任意两行记录的内容不应相同。
(6)表中字段的取值范围称为域。同一字段的域是相同的,不同字段的域也有可能相同,例如工资表中的“基本工资”与“奖金”两个字段的取值范围都可以是10 000以内的实数。