7.2.3 属性
属性的域
属性类型分类
简单(`simple`)和复合(`composite`)属性
什么是简单属性
什么是复合属性
使用复合属性的情况
复合属性的好处
复合属性可有层次
单值( `single-valued`)和多值( `multivalued`)属性
如何表示多值属性
给多值属性设置上下界
派生(`derived`)属性
基属性
派生属性的特点
null
7.2.3 属性
属性的域
每个属性都有一个可取值的集合,称为该属性的域
(domain
),或者值集( value set
)。
course_id
属性的域可能是特定长度的所有文本字符串的集合。- 类似地,属性
semester
的域可能是集合{秋,冬,春,夏}中的字符串
正规地说,实体集的属性是将实体集映射到域的函数。由于一个实体集可能有多个属性,因此每个实体可以用一组**(属性
,数据值
)**对来表示,实体集的每个属性对应一个这样的对。
例如,某个instructor
实体可以用集合{(ID,76766),(name, Crick),(dept_name,生物),( salary,72000)}
来描述,
- 该实体描述了一个叫
Crick
的人,他的教师编号
为76766,是生物系
的成员,工资
为$72000
。
从这里我们可以看出抽象模式与被建模的实际企业的结合。用来描述实体的属性值构成存储在数据库中的数据的一个重要部分。
属性类型分类
E-R模型中的属性可以按照如下的属性类型来进行划分:
简单(simple
)和复合(composite
)属性
什么是简单属性
在我们的例子中,迄今为止出现的属性都是简单属性,也就是说,简单属性不能划分为更小的部分。
什么是复合属性
**复合(composite
)属性可以再划分为更小的部分(即其他属性)**。
例如,属性name
可设计为一个包括first_name
、 middle_initial
和last_name
的复合属性。
使用复合属性的情况
如果一个用户希望在一些场景中引用完整的属性
,而在另外的场景中仅引用属性的一部分
,则在设计模式中使用复合属性是一个好的选择。
假设我们要给student
实体集增加个地址。地址可定义为包含属性street
、city
、state
和zip_code
的复合属性address
。
复合属性的好处
复合属性帮助我们把相关属性聚集起来
,使模型更清晰。
复合属性可有层次
注意,复合属性可以是有层次
的。在复合属性address
中,其子属性street
可以进一步分为street_number
、street_name
和apartment_number
。
单值( single-valued
)和多值( multivalued
)属性
一个属性值只能对应一个一个特定实体的属性是单值(single valued
)的属性。
例如,对某个特定的学生实体而言, student_ID
属性只对应于一个学生ID
。
而在某些情况下对某个特定实体而言,一个属性可能对应于一组值。
假设我们往instructor
实体集添加一个phone_number
属性,每个教师可以有零个、个或多个电话号码
,不同的教师可以有不同数量的电话。这样的属性称作是多值( multivalued
)的。
作为另一个例子,我们可以往实体集instructor
中添加一个属性dependent_name
,它列出所有的眷属。这个属性将是多值的,因为任何一个特定的教师可能有零个、一个或多个眷属
如何表示多值属性
为了表示一个属性是多值的,我们用花括号将属性名括住,例如:{phone_number}
或者{dependent_name}
。
给多值属性设置上下界
在适当的情况下,可以对一个多值属性的取值数目设置上、下界。
例如,一所大学可能将一个教师的电话号码个数限制在两个以内。在这个例子中设置限制表明instructor
实体集的phone_number
属性可以有0~2个值。
派生(derived
)属性
这类属性的值可以从别的相关属性或实体派生出来。例如,让我们假设instructor
实体集有一个属性students_advised
,表示一个教师指导了多少个学生。我们可以通过统计与一个教师相关联的所有student
实体的数目来得到这个属性的值。
又如,假设instructor
实体集具有属性age
,表示教师的年龄。如果instructor
实体集还具有属性date_of_birth
,我们就可以从当前的日期和dae_ of_birth
计算出age
。因此age
就是派生属性。
基属性
在这里,
派生属性的值不存储,而是在需要时计算出来。
null
当实体在某个属性上没有值时使用空(null
)值。
- 空值可以表示”不适用”,即该实体的这个属性不存在值。例如,一个人可能没有中间名字。
- 空值还可以用来表示属性值未知。未知的值可能是缺失的(值存在,但我们没有该信息),或不知道的(我们并不知道该值是否确实存在)。
例如
- 如果一个特定的教师的
name
值是空,我们推测这个值是缺失的
,因为每个教师肯定有一个名字。 - 而
apartment_number
属性的空值- 可能意味着地址不包括房间号(不适用),
- 或房间号是存在的但是我们不知道是什么(缺失的),
- 或者我们不知道房间号是否是该教师的地址的一部分(不知道的)。