7.2.3 属性

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_namemiddle_initiallast_name的复合属性。

使用复合属性的情况

如果一个用户希望在一些场景中引用完整的属性,而在另外的场景中仅引用属性的一部分,则在设计模式中使用复合属性是一个好的选择
假设我们要给student实体集增加个地址。地址可定义为包含属性streetcitystatezip_code的复合属性address

复合属性的好处

复合属性帮助我们把相关属性聚集起来,使模型更清晰。

复合属性可有层次

注意,复合属性可以是有层次。在复合属性address中,其子属性street可以进一步分为street_numberstreet_nameapartment_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就是派生属性。

基属性

在这里,

  • date_of_birth可以称为基属性,或存储的属性
  • age称为派生属性

    派生属性的特点

派生属性的值不存储,而是在需要时计算出来

null

当实体在某个属性上没有值时使用空(null)值。

  • 空值可以表示”不适用”,即该实体的这个属性不存在值。例如,一个人可能没有中间名字。
  • 空值还可以用来表示属性值未知。未知的值可能是缺失的(值存在,但我们没有该信息),或不知道的(我们并不知道该值是否确实存在)。

例如

  • 如果一个特定的教师的name值是空,我们推测这个值是缺失的,因为每个教师肯定有一个名字。
  • apartment_number属性的空值
    • 可能意味着地址不包括房间号(不适用),
    • 或房间号是存在的但是我们不知道是什么(缺失的),
    • 或者我们不知道房间号是否是该教师的地址的一部分(不知道的)。