带着微笑,记住你不是没了他就不能活。
数据库设计是指根据用户的需求在某一具体的数据库管理系统上设计数据库的结构和建立数据库的过程例如编程微课是在线编程教育项目该项目涉及到课程学生老师学习资料等数据这些数据都要被存储下来并且能够方便的增加修改删除和查询这就需要规划课程学生老师学习资料等数据构成以及相互之间的关系因此规划数据构成及数据间关系并应用某一具体的数据库管理系统如MySQL构建数据库的过程就是数据库设计
由于项目需求的易变性和数据的复杂性数据库设计不可能一蹴而就而只能是一种反复探寻逐步求精的过程数据库设计步骤如下图所示
图2-5 数据库设计过程流程图
需求分析阶段主要分析项目涉及的业务活动和数据的使用情况弄清所用数据的种类范围数量以及在业务活动中的存储情况确定用户对数据库系统的使用要求和各种约束条件等形成数据库需求说明书
概念结构设计阶段根据数据库需求说明书创建数据库概念结构描述概念结构的有力工具是ER模型
ER模型表示的概念结构模型独立于任何一种数据模型并独立于任何一个具体的数据库管理系统因此需要把概念结构设计阶段设计的ER模型转换为关系数据模型二维表结构此阶段为逻辑结构设计阶段
物理设计阶段是在计算机的物理设备上确定应采取的数据存储结构和存取方法以及如何分配存储空间等问题关系数据库物理设计的主要工作是由系统自动完成的数据库设计者只要关心索引文件的创建即可
验证设计是在上述设计的基础上收集数据并建立数据库运行应用任务来验证数据库的正确性和合理性当发现设计问题时可能需要对数据库设计进行修改
实体联系模型(ER图)
当前常用的概念数据模型是ER模型ER模型描述数据库的概念模式不考虑数据库的逻辑与物理结构它充分反映现实世界易于理解将现实世界的事物以信息结构的形式很方便地表示出来
例如课程是编程微课的主要内容课程涉及到老师学生等对象等实体进一步分析还涉及到课程视频课程资料课程价格等各种数据在用ER模型对课程分析和描述中对这些实体以及实体之间的联系给出了确切的定义
ER模型有四个概念分别是实体属性联系实体集
实体
实体是客观存在并且可以互相区分的事物可以是人或物也可以是抽象的概念在现实世界实体并不是孤立存在的实体与实体之间也存在联系例如课程与学生之间存在学生学习课程的联系课程与老师之间存在老师创建课程的联系
属性
每个实体具有的特征称为属性一个实体可以由若干属性来描述属性都有其取值范围称为值集或值域例如课程实体可以由课程编号课程名称授课老师类别简课程介价格等属性组成唯一地标识实体的属性或属性组称为实体的关键字例如属性值20180603Java编程基础郎老师编程语言课程以浅显易懂的语言以常见的生活场景为案例带领大家逐步进入计算机编程世界86其中20180603是课程编号的属性值该编号在在所有的课程实体中是唯一的该属性就是课程实体的关键字
联系
实体不是孤立存在的实体之间是有联系的实体之间的联系可以分为三类一对一(1:1)一对多(1n)和多对多(mn)例如一个老师可以创建多个课程老师与课程的联系就是一对多的如果一个老师只能创建一个课程则老师和课程的联系就是一对一的在进行问题分析时要根据客观实际抓住问题实质进行现实世界的抽象
实体集
具有相同属性的实体的集合称为实体集在同一实体集中每个实体的属性及其值域是相同的但可能取不同的值例如所有的课程实体组成课程实体集所有的老师实体组成老师实体集
绘制ER图
ER图是ER模型的图形化描述俗话说一张图胜过千言万语用ER图可以清晰地描述出ER模型的结构
规范的ER图可以帮助人们对ER模型的统一认识便于沟通和讨论有助于工作效率的提高它使用一组预定义的符号来表示ER模型的实体属性联系等概念这些预先定义的符号已经标准化从而让全世界的开发人员都可以采用这些符号而不会引起混淆ER图的基本图素有如下的约定
图 2-6 ER图的基本图素
(1)用长方形表示实体在框内写上实体名
(2)用椭圆表示实体的属性并用连接线把实体与属性连接起来属性如果是实体的关键字可以用双线椭圆表示
(3)用菱形表示实体间的联系菱形内写上联系名用连接线把菱形分别与有关的实体相连接在连接线旁标上连接的类型如果联系也有属性则联系的属性和菱形连接
图 2-7 用ER图表示的课程管理
图2-7所示为用ER图表示一个课程管理这是一个简化的课程管理模型课程由老师创建并属于老师两者之间是一对多的联系课程与学生直接存在学习的联系课程与学生是多对多的联系因此联系也有属性分别是学生编号和课程编号双线椭圆表示的属性编号是实体的关键字
通过图2-7可以看出ER模型是依赖业务运营方式的它是企业运营方式的信息化描述企业业务的改变直接影响着ER图的结构和实体间的联系即使是相同的业务数据库设计人员侧重分析的数据不同给出的ER图也可能是不同的
对于设计比较复杂的系统来说有时为了使ER图简洁明了在ER图中可以省略属性只画出实体和联系将属性以表格的形式另外列出如图2-8所示给出的是不包含属性的ER图
图 2-8 不包含属性的课程管理ER图
ER图直观易懂是系统开发人员和客户之间很好的沟通工具对于客户来说它概况了企业运营的方式和各种联系对于系统开发人员来说它从概念上描述了一个应用系统数据库的信息组织因此如能准确画出企业运营方式的ER图就意味着搞清楚了企业的业务运营方式以后可以根据ER图结合具体的数据库管理系统把ER图转换为数据库管理系统所能支持的数据模型这种逐步推进的数据库设计方法已经普遍应用于数据库设计中画出应用系统的ER图成为数据库设计的一个重要步骤
关系模型
ER图给出了实体联系模型的图形化描述增强了开发人员与客户的沟通能力在需求开发阶段ER模型是非常重要的也是从企业的业务运营方式到概念模型的映射
到了设计阶段就需要在概念模型的基础上建立关系模型关系模型是用二维表来表示实体集属性间的关系以及实体间联系的形式化模型它将用户数据的逻辑结构ER模型归纳为满足一定条件的二维表的形式
ER模型中的一个实体或联系对应一张二维表ER模型中的实体属性转换为二维表的列也可称为属性每个属性的名称称为属性名也可称为列名每个属性取值范围称为该属性的域二维表每个属性或列取值后的一行数据称为二维表的一个元组也可以称为一条记录二维表可以包含有限个不重复的记录
图2-9给出了实体课程老师转化为关系模型的二维表每个课程是课程表中的一条记录或一个元组即一行同样每个老师的属性也反映在老师表中的一行课程表和老师表的联系反映在课程表属性老师编号字段上该字段和老师表的编号字段为同一个字段因此通过老师编号字段可以确定是哪位老师建立的课程
图 2-9 由实体课程和老师转化的课程和
由二维表的的不可重复性可知关系中必然存在一个属性或属性组能够唯一标识一个元组该属性或属性组称为关键字当关系中存在多个关键字时称它们为候选关键字指定其中一个为主关键字简称主键
设计二维表时关系应满足如下性质
(1)表中每一列的取值范围都是相同的也就是数据类型相同
(2)不同列的取值范围可以相同但列名称不能相同
(3)表中列的次序可以变换不影响关系的实际意义
(4)同一个表中不允许存在两个完全相同的元组这是集合的一个基本性质保证了关系中元组的唯一性
(5)行的次序可以任意交换
(6)关系中的任何一个属性值都必须是不可分的元素