一文彻底解析数据库设计思路

实体关系(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 的外键(可以简单理解为表的一列是另一张表的主键, 这两张表是有关联的)。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值