--- title: "04-设计数据库" created: 2025-11-25 tags: - 项目筑基 --- # 设计数据库 我们该如何去设计数据库呢? ## 数据库设计方法: 三范式、新奥尔良法、E-R模型设计方法等 ## 数据库设计过程: 需求分析、概念设计、逻辑设计、物理设计、实施、运行与维护 ## 几道题(概念) 数据库设计人员与用户之间沟通信息的桥梁是实体联系图(E-R模型图) 关系模式的任何属性 不可再分(关系是一种规范化的表格,它有以下限制:①关系中的每一个属性值都是不可分解的。 ②关系中不允许出现相同的元组。 ③关系中不考虑元组之间的顺序。 ④元组中属性也是无序的。) 数据库概念设计中 最常用的数据模型是 实体联系模型 建立实际数据库结构是属于数据库设计的 数据库实施 阶段 在关系模型中,一个候选键是 可由一个或多个其值能唯一标识元组的属性组成 局部E-R图合并成全局E-R图时可能发生冲突,合并冲突:属性冲突、命名冲突、结构冲突 主码:由一个或多个属性组成,其值能唯一标识关系中的一个元组 需求分析阶段设计数据流图通常采用:由顶而下的方法 ## 数据建模: ### 三个世界: 现实世界、信息世界(概念模型)、计算机世界(数据模型) ### 两级抽象: 概念模型与数据模型是对客观事物及其联系的两级抽象描述,概念模型是基础,数据模型由概念模型导出 概念模型:对数据进行综合、抽象和归纳,构建信息世界的概念模型 数据模型:将信息世界的概念模型转换为计算机世界的数据模型。 ### 概念模型 #### 实体: 客观存在并可相互区分的事物,可以是抽象事物 #### 属性: 实体或联系所具有的特性 #### 码(关键字): 唯一标识实体的属性(集) #### 域(范围): 某个属性的取值范围 #### 元组(记录): 元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。 #### 实体型: 实体的结构描述,通常为实体名和属性名的集合。 学院(学院编号,学院名称,学院电话,学院地址) #### 实体值: 具体的实体,是属性值的集合 (‘01',’’大数据学院,’027-8754111’,’东11-8楼’) #### 实体集: 由同一类型的实体构成的集合称为实体集 #### 联系: 实体之间及内部的关联(对应)关系 ##### 一对一 ![[image-2eef0061.png]] ##### 一对多 ![[image-665872f6.png]] ##### 多对多 ![[image-56771ec7.png]] #### E-R图 ##### 实体型: 用矩形表示,框内写明实体名。 ##### 属性: 用椭圆表示,并用无向边和相应实体相连。 ##### 联系: 用菱形表示,框内写明联系名,并用无向边和有关实体相连,在无向边旁标明联系的类型。 在E-R图中属性一定是自身的属性 联系(关系):1:1 1:n m:n 三个基本组成部分:实体、属性、联系 ##### 示例: 图书借阅管理系统E-R图: ![[image-d168fb44.png]] 医院病房计算机管理系统E-R图: ![[image-799cb9ef.png]] 将概念模型转化为数据模型需要考虑三个问题 数据结构:如何实现 实体和联系的属性、属性的数据类型,实体间的联系 完整性约束:属性取值应该是有一个范围约束的 数据操作:应用中会对数据进行的处理 (数据模型三要素:数据结构、数据的约束条件、数据操作) ### 数据模型 数据模型也是有分类的:面向记录、面向对象 #### 面向记录: 数据模型:层次模型、网状模型、关系模型 (1)层次模型;树状图 ![[image-14351501.png]] (2)网状模型:网状图 ![[image-580c49fe.png]] (3)关系模型:二维表图 ![[image-626978e1.png]] #### 面向对象: 逻辑数据模型 #### 关系模型相关概念 二维表中 每一列称为一个属性,每一列有个属性名,行列交叉处为属性值 属性的个数称为度、目、元 域:属性的的取值范围 每一行称为一个元组,在文件中对应着一条记录,元组的个数称为基数 一个关系就是一个二维表 关系模式就是对关系的描述 关系名(属性1,属性2……) 候选键:关系中用来唯一标识一个元组的属性或属性组 主键(主关键词/主码):确定一个唯一的候选码作为主键,可以唯一标识一个元组。 外键:不是本表的主键,是另一个表的主键 通过外键可以确定两表之间1:n的关系。 主表: 主键为从表外键 从表: 外键所在的表 主表和从表通过外键相关联 ![[image-81b03c73.png]] #### 关系模型的完整性约束 ##### 实体完整性约束 不能有相同的两行(行完整性) 主键属性值不能为NULL不能相同 ##### 参照完整性约束 引用外键后不能插入主表中未出现的属性值 ##### 用户定义完整性约束 自己根据现实对应需求加的(空值约束、默认值约束、check约束) ### 概念模型到关系模型的转换(E-R图转向关系模型) #### 独立实体到关系模型的转化 ![[image-dc86ec94.png]] 一个独立实体(型)=>一个关系模式, 即一张关系表 实体码=>关系表的关键属性 其他属性=>关系表的属性。 实体属性取值情况=>决定关系属性的取值域。 #### 联系的转化 1:1联系到关系模型的转化 ![[image-c5826ec7.png]] 1:n联系到关系模型的转化 ![[image-9bba32ab.png]] m:n联系到关系模型的转化 ![[image-48c255db.png]] #### 分析规则 一、实体类型的转换 (1)每个实体类型转换成一个关系模式 (2)实体的属性即为关系模式的属性 (3)实体标识符即为关系模式的键 ![[image-3ca4c215.png]] 比如这个: ①平台(商标,名称,所属公司) ②管理员(账号ID,账号密码,用户名) ③顾客(账号ID,账号密码,昵称,地址,电话,邮箱,备注) ④商品(商品编号,名称,库存量,图片,描述,单价,类型) 二、联系类型的转换 (1)1 :1 两个实体类型转换成的两个关系模式中任意一个关系模式的属性中加入另一个关系模式的键和联系类型的属性。 (2)1 :N 在N端实体类型转换成的关系模式中加入1端实体类型的键和联系类型的属性。 对于1:N联系“聘用”,在“管理员”关系模式中加入商标和聘期两个属性 (商标是1端的键): 管理员(账号ID,账号密码,用户名,商标、聘期) (3)M:N 将联系类型也转换成关系模式,其属性为两端实体类型的键加上联系类型的属性,而键为两端实体键的组合。 对于M:N联系“下单”和“上传发布”,则生成两个新的关系模式: ①下单(商品编号,顾客账号ID,订单编号,订单数量,下单时间) ②上传发布(商品编号,管理员账号ID,发布时间) 所以4个不同实体集、2个m:n联系 转换为关系模式有六个(实体4个 中间量联系2个) --- ⬅️ [[03-数据库的管理|03-数据库的管理]] 🏠 [[00-数据库|00-数据库]] ➡️ [[05-三范式|05-三范式]]