Chapter 6 Entity(实体)-Relationship(联系) Model¶
Abstract
- Database Design Process
- Modeling
- Constraints
- Weak Entity Sets
- Reduction to Relation Schemas
- Design Issues
- Extended E-R Features
- UML(第六次课未讲)
Idea of E-R Model
-
A database can be modeled as:
- a collection of entities
- relationship among entities.
Entity(实体) And Entities(实体集)¶
An entity is an object that exists and is distinguishable(可区分) from other objects. e.g. specific person, company, event, plant
-
Entities have attributes(实体都有属性) e.g. people have names and addresses
-
An entity set is a set of entities of the same type that share the same properties.(一个实体集是同一类型的实体的集合,它们共享相同的属性) e.g. set of all persons, companies, trees, holidays
Entity sets can be represented graphically as follows:
- Rectangles represent entity sets.(矩阵表示实体集)
- Attributes listed inside entity rectangle
- Underline indicates primary key attributes
Example
Relation(联系) And Relationship Sets(联系集)¶
- A relationship is an association among several entities.A relationship set is a mathematical relation among n \(\geq\) 2 entities, each taken from entity \(\{(e_1, e_2, ... e_n) | e_1 \in E_1, e_2 \in E_2, ..., e_n \in E_n\}\) where \((e_1, e_2, ..., e_n)\) is a relationship. (关系是几个实体之间的关联。关系集是n个实体之间的数学关系)
- The association between entity sets is referred to as participation; i.e., the entity sets \(E_1, E_2, …, E_n\) participate(参与) in relationship set \(R\).
Example
- 关系集在E-R图中用菱形表示,通过线条连接到多个不同的实体集。图中的E-R图显示了两个实体集,即教师(instructor)和学生(student),通过一个二元关系集advisor进行关联。
- 在E-R模式中,关系实例代表了正在被建模的真实企业中命名实体之间的关联。举例来说,个体教师实体Katz,其教师ID为45565,以及学生实体Shankar,其学生ID为12345,参与了一个指导者(advisor)的关系实例。这个关系实例表示在大学中,教师Katz正在指导学生Shankar。
- 另一个例子是考虑两个实体集,学生(student)和课程节(section),其中课程节表示一个课程的开设。我们可以定义关系集takes来表示学生和其注册的课程节之间的关联。虽然在上面的例子中每个关系集都是两个实体集之间的关联,但一般来说,一个关系集可能表示超过两个实体集之间的关联。
Roles¶
- Entity sets of a relationship need not be distinct.Each occurrence of an entity set plays a “role” in the relationship.The labels
course_id
andprereq_id
are called roles. - 实体在关系中扮演的功能称为该实体的角色。由于参与关系集的实体集通常是互异的,因此角色是隐含的而且通常不会被指定。但是,在关系的含义需要澄清时,它们是有用的。
- 这种情况发生在关系集的实体集并非互异的情况下;也就是说,同一个实体集在不同的角色中多次参与一个关系集。在这种类型的关系集中,有时被称为递归关系集,需要显式的角色名称来指定实体如何参与关系实例。
Role
例如,考虑记录大学所有课程信息的实体集course。为了描述一个课程\((C_2)\)是另一个课程\((C_1)\)的先决条件的情况,我们有关系集prereq,由课程实体的有序对建模。一对中的第一个课程扮演课程\(C_1\)的角色,而第二个扮演先决条件课程\(C_2\)的角色。通过这种方式,所有\(prereq\)的关系都由\((C_1,C_2)\)对来特征化;排除了\((C_2,C_1)\)对。在\(E-R\)图中,我们通过在菱形和矩形之间的连线上标注角色指示符来表示角色。图中展示了在课程实体集和先决关系集之间的角色指示符course_id和prereq_id。
Degree(度) of a Relationship Set¶
Definition : 参与关系集的实体集的数目
binary relationship(二元联系)
- involve two entity sets (or degree two).
- most relationship sets in a database system are binary.
尽量不用多元联系,因为二元联系比较清晰。而且任何的多元联系都可以通过引入中介实体转化为二元联系。
Example
转化为二元联系:把多元联系实体化。如 proj_guide
里有老师、学生、工程的 id. 随后这个实体又和另外三个实体各有一个二元联系。
Relationship Sets with Attributes¶
- 一个关系还可以有称为描述性属性(descriptive attribute)的属性。作为关系的描述性属性的示例,考虑关系集takes,它关联了实体集student和section。我们可能希望在关系中存储一个描述性属性grade,以记录学生在课程中获得的成绩。
- 关系集的属性在E-R图中由一个未分割的矩形表示。我们用虚线将该矩形与表示该关系集的菱形连接起来。
- 例如,图中显示了实体集section和student之间的关系集takes。我们在关系集takes上附加了描述性属性grade。一个关系集可能有多个描述性属性;例如,我们还可以为takes关系集存储一个描述性属性credit,以记录学生是否为了学分选修了该课程,或者是以旁听的方式参加了课程。
An attribute can also be property of a relationship set
- The advisor relationship set between entity sets instructor and student may have the attribute date which tracks when the student started being associated with the advisor.
Complex Attributes¶
- An entity is represented by a set of attributes, that is descriptive properties possessed by all members of an entity set.
- 对于每个属性,都有一组允许的值,称为该属性的域(domain),或值集(value set)。属性course_id的域可能是一定长度的所有文本字符串的集合。同样,属性semester的域可能是集合{秋季, 冬季, 春季, 夏季}中的字符串。
Attribute types
- Simple(简单) and composite(复合) attributes.
- Single-valued(单值) and multivalued(多值) attributes
- Derived(派生) attributes
- 图中显示了如何在E-R符号中表示复合属性。在这里,一个具有组成属性名为first name、middle initial和last name的复合属性name代替了教师的简单属性name。另一个例子,假设我们要向教师实体集添加一个地址。地址可以被定义为具有属性street、city、state和postal code的复合属性address。属性street本身是一个复合属性,其组成属性是street number、street name和apartment number。该图还说明了一个多值属性phone number,用“{phone number}”表示,以及一个派生属性age,用“age ( )”表示。
简单和复合属性¶
- 到目前为止,在我们的例子中,属性都是简单的;也就是说,它们没有被分成子部分。另一方面,复合属性可以被分成子部分(即其他属性)。
- 例如,一个属性name可以被构造为一个由名字、中间名和姓组成的复合属性。在设计模式中使用复合属性是一个很好的选择,如果用户有时希望引用整个属性,而有时只希望引用属性的组成部分。假设我们要为学生实体集添加一个地址。地址可以定义为具有属性street、city、state和postal code的复合属性address。
- 复合属性帮助我们将相关属性组合在一起,使建模更清晰。另外需要注意的是,复合属性可能呈现为一个层次结构。在复合属性address中,它的组成属性street可以进一步分成street number、street name和apartment number。图中描述了这些复合属性的例子,用于教师实体集
单值和多值属性¶
- 在我们的例子中,所有属性对于特定实体都只有一个值。例如,对于特定学生实体,学生ID属性仅指代一个学生ID。这样的属性被称为单值属性。可能会有一些情况下,一个属性对于特定实体有一组值。
- 假设我们向教师实体集添加一个电话号码属性。一个教师可能有零个、一个或多个电话号码,而不同的教师可能拥有不同数量的电话号码。这种类型的属性被称为多值属性。另一个例子是,我们可以向教师实体集添加一个名为dependent的属性,列出所有的受抚养人。这个属性将是多值的,因为任何特定的教师可能有零个、一个或多个受抚养人
派生属性¶
- 这种类型的属性的值可以从其他相关属性或实体的值中派生出来。例如,假设教师实体集有一个属性students advised,表示一个教师指导了多少个学生。我们可以通过计算与该教师相关联的学生实体的数量来派生出这个属性的值。
- 另一个例子,假设教师实体集有一个表示教师年龄的属性age。如果教师实体集还有一个属性date of birth,我们可以根据出生日期和当前日期来计算年龄。因此,年龄是一个派生属性。在这种情况下,出生日期可能被称为基本属性或存储属性。派生属性的值不存储,但在需要时进行计算。
空值¶
- 当实体没有值时,属性取空值。空值可能表示“不适用”——也就是说,该值对于实体不存在。例如,一个没有中间名的人的中间名属性可以设为空值。空值还可以表示属性值未知。未知的值可能是缺失的(值存在,但我们没有这个信息),或者是不知道的(我们不知道该值是否存在)。
- 例如,如果某个特定教师的姓名值为空值,我们会假设该值缺失,因为每个教师都必须有一个姓名。对于apartment number属性的空值可能意味着地址不包括公寓号(不适用),也可能意味着存在公寓号,但我们不知道是什么(缺失),或者我们不知道公寓号是否是教师地址的一部分(未知)。
Mapping Cardinality(映射基数)¶
Express the number of entities to which another entity can be associated via a relationship set.
Abstract
- One to one
- One to many
- Many to one
- Many to many
We express cardinality constraints by drawing either a directed line (\(\rightarrow\)), signifying “one,” or an undirected line (\(—\)), signifying “many,” between the relationship set and the entity set.
基数约束
-
一对一。我们从关系集向两个实体集绘制有向线。例如,在图中,指向教师和学生的有向线表明,一个教师最多可以指导一个学生,一个学生最多可以有一个指导者。
-
一对多。我们从关系集向关系的“一”侧绘制有向线。因此,在图中,从关系集advisor到实体集instructor有一个有向线,到实体集student有一个无向线。这表示一个教师可以指导多个学生,但一个学生最多只能有一个指导者。
-
多对一。我们从关系集向关系的“一”侧绘制有向线。因此,在图中,从关系集advisor到实体集instructor有一个无向线,到实体集student有一个有向线。这表示一个教师最多可以指导一个学生,但一个学生可以有多个指导者。
-
多对多。我们从关系集向两个实体集绘制无向线。因此,在图中,从关系集advisor到实体集instructor和student都有无向线。这表示一个教师可以指导多个学生,一个学生也可以有多个指导者
哪边有箭头哪边就是单一的
Total and Partial Participation¶
- Total participation (indicated by double line): every entity in the entity set participates in at least one relationship in the relationship set
所有元素都要参与关系 - Partial participation: some entities may not participate in any relationship in the relationship set
Example
- 举例来说,一个大学可能要求每个学生至少有一个指导老师;在E-R模型中,这对应于要求每个实体至少通过指导者关系与至少一个教师相关联。因此,学生在关系集advisor中的参与是完全的。相比之下,一个教师不一定要指导任何学生。因此,可能只有一些教师实体通过指导者关系与学生实体集相关联,因此教师在advisor关系集中的参与是部分的。我们使用双线来表示实体在关系集中的完全参与。图中显示了一个指导者关系集的示例,双线表示学生必须有一个指导老师。
Notation for Expressing More Complex Constraints¶
A line may have an associated minimum and maximum cardinality, shown in the form l..h, where l is the minimum and h the maximum cardinality
- A minimum value of 1 indicates total participation.
- A maximum value of 1 indicates that the entity participates in at most one relationship
- A maximum value of * indicates no limit.
Example
多元关系里,我们只允许最多有一个箭头。因为不止一个箭头的话,可以用两种方法来解释。
Primary Key¶
Primary Key for Relationship Sets
多元联系的 primary key 是两端 key 的组合。如果是一对一的联系,那么单个实体的 key 也可以作为 primary key. 一对多的联系(如导师和学生就是一对多,那么主键应该为学生)
contents
- Entity sets
- Relationship sets
- Weak entity sets
Entity Sets¶
- 概念上,个体实体是不同的;然而从数据库的角度来看,它们之间的区别必须以它们的属性来表达。因此,实体的属性值必须是能够唯一标识实体的。换句话说,实体集中的任何两个实体都不允许对所有属性具有完全相同的值,关系模式的键的概念,如在第2.3节中定义的,直接适用于实体集。也就是说,实体的键是一组足以区分实体之间的属性。超键、候选键和主键的概念同样适用于实体集,就像它们适用于关系模式一样。键还有助于唯一标识关系,从而使关系之间区别开来。接下来,我们定义关系集的相应键的概念
Relationship Sets¶
- 将参与relationship两端的key组合起来(多元的讨论~过于复杂~)
Weak Entity Sets¶
An entity set that does not have a primary key is referred to as a weak entity set.
Weak Entity的产生
- 考虑一个部分实体,它由课程标识符、学期、年份和部分标识符唯一标识。部分实体与课程实体相关联。假设我们创建一个实体集之间的关系集sec_course,即部分和课程之间的关系。
- 现在,请注意,sec_course中的信息是多余的,因为部分已经有一个course_id属性,它标识了部分与哪个课程相关联。处理此冗余的一种选择是摆脱关系sec_course;然而,通过这样做,部分和课程之间的关系变得隐含在一个属性中,这是不可取的。
- 处理这种冗余的另一种方法是不在部分实体中存储course_id属性,只存储剩余的属性sec_id、year和semester。然而,部分实体集然后没有足够的属性来唯一标识一个特定的部分实体;尽管每个部分实体都是独特的,但不同课程的部分可能共享相同的sec_id、year和semester。
- 为了解决这个问题,我们将关系sec course视为一种提供额外信息的特殊关系,即用于唯一标识部分实体所需的course_id。
- Weak Entity要用双线框起来
The existence of a weak entity set depends on the existence of a identifying entity set(标识性实体集)
- It must relate to the identifying entity set via a total, one-to-many relationship set from the identifying to the weak entity set
- Identifying relationship(标识性联系) depicted using a double diamond
The discriminator(分辨符,or partial key) of a weak entity set is the set of attributes that distinguishes among all the entities of a weak entity set when the identifying entity they depend is known.
We underline the discriminator of a weak entity set with a dashed line. (虚线) We put the identifying relationship of a weak entity in a double diamond. (双框)
Example
Redundant Attributes
Reduction to Relational Schemas¶
一个 ER 图可以转换成多种模式(图数据库、面向对象、关系模式等)
- A strong entity set reduces to a schema with the same attributes
course(course_id, title, credits)
- A weak entity set becomes a table that includes a column for the primary key of the identifying strong entity set.
Primary key of the table is the union of the discriminator of the weak entity set and the primary key of the identifying strong entity set.
标识集合的主键加上弱实体集的分辨符。
section(course_id, sec_id, semester, year)
-
A many-to-many relationship set is represented as a schema with attributes for the primary keys of the two participating entity sets, and any descriptive attributes of the relationship set. 即两个集合的主键拼起来,加上关系的附带属性。
Example
advisor = (s_id, i_id)
为什么多对多的关系一定要转化成一个关系模式
-
Many-to-one and one-to-many relationship sets that are total on the many-side can be represented by adding an extra attribute to the “many” side, containing the primary key of the “one” side.
多对一可以不转换为单独的关系模式,直接在“多“那个表上添加”一“的主键即可。Example
inst_dept
本质就是将instructor
和department
合并,在instrutor
的属性上添加dept_name
.
department(dept_name, building, budget) instructor(ID,name,salary) inst_dept(ID, dept_name) // 转换后(即合并) department(dept_name, building, budget) instructor(ID, name, salary, dept_name)
各有利弊,第一种写法表可能会太多,第二种写法合在一起表可能太大,不利于管理。
Composite and Multivalued Attributes¶
Composite attributes are flattened out by creating a separate attribute for each component attribute.
就像在 C 语言里定义一个结构。但是关系数据库里每个属性都必须是简单数据类型,就必须把这些复合属性铺平。
e.g.
instructor(ID,
first_name, middle_initial, last_name,
street_number, street_name, apt_number,
city, state, zip_code, date_of_birth, age)
A multivalued attribute M of an entity E is represented by a separate schema EM.
Schema EM has attributes corresponding to the primary key of E and an attribute corresponding to multivalued attribute M.
Example
Special Case
Design Issues(设计问题)¶
Common Mistakes in E-R Diagrams¶
- 信息冗余
student 的dept_name
应该去掉
- 关系属性使用不当
这里一门课可能有很多次作业,不能只用一个实体。
解决方法:
Use of entity sets vs. attributes¶
- 第一种方法,明确放一个电话号码。
- 第二种方法,电话号码可以附属更多属性,一个电话号码可以由多人共享。(如办公室的公共电话)
Use of entity sets vs. relationship sets¶
Possible guideline is to designate a relationship set to describe an action that occurs between entities.
实体可以便于与其他实体建立联系。
如电商,我们可以简单的把客户和商品用 buy
联系起来,但后续还会有付款、物流等情况,我们最好把 buy
实体化为订单。
Placement of relationship attributes¶
- 第一种方法,可以记录每次访问的访问日期。
- 第二种方法,只能记录用户最近一次访问日期,不完整。
Binary Vs. Non-Binary Relationships¶
-
Binary versus n-ary relationship sets
Although it is possible to replace any nonbinary (n-ary, for \(n >2\)) relationship set by a number of distinct binary relationship sets, a n-ary relationship set shows more clearly that several entities participate in a single relationship. -
Some relationships that appear to be non-binary may be better represented using binary relationships e.g. A ternary relationship parents, relating a child to his/her father and mother, is best replaced by two binary relationships, father and mother Using two binary relationships allows partial information (e.g. , only mother being know) But there are some relationships that are naturally non-binary e.g. :
proj_guide
Converting Non-Binary Relationships
Extended ER Features¶
- Specialization(特化)
- Top-down design process; we designate subgroupings within an entity set that are distinctive from other entities in the set.
- Attribute inheritance – a lower-level entity set inherits all the attributes and relationship participation of the higher-level entity set to which it is linked.
- Generalization(概化)
A bottom-up design process – combine a number of entity sets that share the same features into a higher-level entity set.
An Example¶
-
这里 instructor 实体里不需要
dept
属性,因为在 department 实体里有了,否则会冗余。 -
每个实体直接转换为关系模式。关系转换为元组,元素为两个表的 primary key. 对于一对多的情况(如
instructor
和department)转换后
primary key 仍为 ID. 为了减少表的数量,可以把 primary key 相同的表合并。 -
section
不足以唯一确定元组,称为弱实体,依赖于另一个实体(如 OOP、DB 都可以有同样年份学期的 1 班)。因为课程号course_id
放在section
会有冗余,因此没有这个属性,导致形成了一个弱实体。sec_course
表示联系的是弱实体(双框),section
不能离开course
存在。 -
relationship 上也可以带属性,如
takes
上的grade
. -
关系双方可以是相同的实体集合,
course
这里的prereq
是多对多,表示一门课可以有多门预修课,一门课也可以是多门课的预修课。{}
里面是多个值,表示复合属性。这里表示time_slot_id
实际上可以由这三个属性复合而成。 -
一个学生只能属于一个系
- 虚线(部分关键字,标识符)
- 多对多需要一个表
- 一对多不需要表