Claws Garden

数据库——数据库设计

数据库设计

数据库设计又称数据库逻辑设计或者数据库建模,目的就是将现实中的数据储存在数据库中。这里重点只关注关系数据库,不关系对象关系数据库。

例如学生-课程数据库,如果把所有学生的属性和所有课程的属性全部放在一张表中,可以说是十分糟糕的设计,这是因为这样的数据库不仅有大量的数据冗余,而且修改,删除和插入的时候都有很大的可能会出错。比较好的设计比如做成三张表,一张是学生表,一张是课程表,另一表中存放学生和修过的对应课程以及学生在该课程上的成绩。

E-R模型

E-R模型即实体-关系模型。

在数据库设计中,有3种基本数据分类对象:

一张实体关系图比如

员工实体关系图

实体和属性

属性也有一些自己的特点:

在E-R图中,实体由矩形表示,属性由椭圆表示,多值属性和实体的链接用双线。

如果把实体和属性对应到表中,那么这是一张和实体同名的表,表的列对应到实体的简单单值属性(注意,复合属性本身并不变成表的列,而是构成复合属性的那些单值属性构成表的列),实体的实例都对应为表的行。原来的标识符对应到表中的候选键,而原来的主标识符对应到表的主键。

实体和关系

三张关系图

在E-R图中,关系用菱形框表示,并且连接到其他实体。关系也可以有自己的属性。如果一个实体有一个关系连接到自己,那么称为递归关系或者环。

实体和关系之间的数量关系可以用card表示,具体如下:

可以把card(E,R)的值(一个数对)写在实体和关系的连线上,就可以表示每个实体和关系间的数量对应关系。

一对一联系:指的是两个对象均单值参与

多对一联系:指的是两个对象一个单值参与一个多值参与。

多对多联系:指两个对象均多值参与

联系转化为表

  1. 多对多联系:转化成一张表,每行表示一个联系实例,列至少要有两个对象的主键属性,还有联系自身所具有的属性。
  2. 多对一联系:不转化为表,而是将多值参与的对象表的主键,作为外键加入单值参与的对象的表中。
  3. 一对一联系:如果两个对象分别是T和S,那么既可以在S的表中加入T的主键作为外键,也可以在T的表中加入S的主键作为外键,或者两者都要。如果同时这两个对象又都是强制参与联系,那么最好将两张表合并成一张表,这样可以避免使用外键。

6.3 其他E-R概念

属性的参数

表示一个对象实例可以对应多少个属性。

和联系是类似的,属性也有:

弱实体

如果一个实体的所有实例都通过联系R依赖于另一个实体存在,那么前者是弱实体,后者是强实体。

泛化层次,泛化联系

可以把很多具有相同公共属性的对象抽象出来他们公共的一部分作为超类型实体,类似于父类的存在。实体类型和泛化类型之间的联系通常被称为is_a联系。

案例学习

图书借阅管理数据库

背景

粗体表示主键

实体:

联系:

E-R图

case_library

表设计

篮球联赛信息管理

背景

实体:

关系:

方案1 E-R图

将比赛视为关系而不是实体

case_match_1

方案2 E-R图

将比赛也视为一个实体处理,有一个主键mid

case_match_2

表设计

方案二的表:

方案一的话比赛没有mid。

网络论坛聊天管理

背景

E-R图

case_char

表设计

也可以把回复关系新建一个表。

邮件信息管理

背景

E-R图

case_email

这个例子正说明,两个实体之间可以有多条关系存在。

表设计

#数据库课程