实体关系(Entity-Relationship, E-R)概念
E-R 模型是一种描述数据库的抽象方法。
实体关系建模的方法更多依赖于直觉而非机器, 但会导致相同的设计。
E-R 模型
实体 (Entity)
实体是具有公共性质的可区别的现实世界对象集合。
举例:
学生
教师
课程
选课
一般而言, 一个实体被映射到一张关系表中, 代表一组对象的集合; 表中的每一行被称为一个实体发生(Entity Occurrence)或实体实例(Entity Instance), 代表一个特定对象。
在 E-R 图中, 用矩形框表示:
属性 (Attribute)
属性是描述实体(Entity)或者关系(Relationship)性质的关系项。
在 E-R 图中, 用椭圆框表示, 主标识符要加下划线, 多值属性要加一条线。
特定属性的特定术语:
标识符或候选键 (Identifier 或 Candidate Key)
标识符是能够唯一识别一个实体实例的属性集, 一个实体可以有多个标识符。
主键或主标识符 (Primary Key)
被数据库设计者选择出来的作为表中特定行唯一标识符的候选键, 一个实体只有一个主标识符。
描述符(Descriptor)
描述性的非键属性, 如年龄。
复合属性
一组共同描述一个性质的简单属性。
多值属性
单个实例这个属性可以具有多个值, 如下图: 一个人可以有多个爱好
联系(Relationships)
给定一个包含 m 个实体的有序列表, E1, E2,…, Em(一个实体可以出现多次)。
一个联系 R 当以了这些实体实例之间的对应规则。
特别地 R 代表了一个 m 元组的集合, 它是笛卡尔积 E1× E2× …× Em的子集。
联系用菱形表示, 联系也能附加属性。
举例:
将实体和属性转换为关系
规则一
一个实体映射到关系型数据库中的一张表. 实体的单值属性被映射为表的列(复合属性被映射为多个简单列)。
实体标识符映射为候选键。
实体主标识符映射为主键。
实体的实例映射为表中的一行。
举个例子: 按上面出现过的图, Students(sid, Iname, fname, midiaitia)
规则二
多值属性必须被映射成它自己的表。
举例: 对于上面的 hobbies 多值属性, 将 hobbies 单独映射成一张表hobbies(hobby,eid)。
规则三: N-N Relationships
当两个实体 E 和 F 参与一个多对多二元联系 R 时, 在相关的关系型数据库中, 联系被映射成一个表 T, 表 T 中包含所有从 E 和 F 转化而来的两个表的主键的所有属性, 列构成了表 T 的主键。
T 也包含了所有附加在联系 R 上的属性构成的列。
简单来讲, 就是 N-N 联系中, 将联系单独转换成一张表, 表的主键是 E 和 F 的表的主键, 还要加上附加的属性
上面这好似读天书一般, 举个例子:
Employees 和 Projects 是 N-N 的关系, 可以得到三张表:
Employees(eid, straddr, city,…)
Projects(prid, proj_name, cue_date)
work_on(eid, prid, percent)
规则四: N-1 Relationships
当两个实体 E, F 参与 N-1 的二元联系 R 时, 这个关系不能被映射成自身的一个表。
若 max_card(F, R) = 1,并且 F 为联系中的多方, 那么从实体 F 转换出的关系表 T 中包括从 E 转换出的关系表的主键属性列, 这被称为 T 的外键(可以简单理解为表的一列是另一张表的主键, 这两张表是有关联的)。