数据库(ER)模型是一种识别数据库中实体及其关联关系的图表。最终,这些设计会形成一个数据库关系模型,并配有相应的规则。
设计阶段
对于小型应用,我们可以通过理解需求直接决定要建立的关系和属性。
不过,对于大型项目,我们在设计数据库时,需要和用户沟通,了解他们的需求,要先把这些需求用容易理解的方式表达出来,然后再转换成具体的设计方案,形成一个系统框架。
这个框架会明确说明用户需要什么数据,以及如何设计数据库来满足这些需求。
需求分析:数据库设计者需要和专业人员、用户进行充分交流,写出需求说明。
概念设计:把需求转换成数据库的概念模型,这个模型会详细描述:
数据库中的实体有哪些
这些实体的特征是什么
实体之间有什么联系
需要遵守什么规则
通常,我们会画一个ER图来表示这些内容,ER 图主要描述数据和它们之间的关系,不涉及具体的存储细节。
最后的物理设计阶段才会确定如何存储数据,包括文件组织方式和索引结构的选择。
在开发数据库应用前,认真完成这些设计工作非常重要,在此过程中,一个主要部分是决定如何在设计中表示各种类型的「事物」。
比如:人、地方、产品等等,我们使用实体(entity)这个术语来指代任何可以明确识别的个体。
实体-联系模型
在数据库设计中,为了管理数据,我们使用实体-联系模型(Entity- Model,简称 ER 模型)的工具。
这种模型主要有三个重要概念:实体集、联系集、属性。同时,ER 模型也可以用一种图形化的方式表示,称为ER 图。
什么是实体?
实体是现实世界中可以被区分的一个对象。比如:一个人、一家医院或一辆救护车都可以是实体,每个实体都可以通过一个唯一的标识符来区分。
实体可以是具体的,比如医生、病人、建筑物;也可以是抽象的,比如角色、事件、演唱会等。
什么是实体集?
实体集是具有相同性质或属性的一类实体的集合。一家医院里的所有医生是一个实体集。这家医院的所有救护车也是一个实体集。实体集中每个实体都具有相同类型的属性。
什么是属性?
属性是用来描述实体的特性或性质的。
对于一个医生实体,它可能有:医生编号(ID)、姓名(Name)、科室()等属性。对于一辆救护车实体,它可能有:车牌号(License Plate)、型号(Model)等属性。
在数据库中,实体通过一组属性来表示,属性是实体集中每个成员所具有的描述性特征。
实体集可能包含的属性有 ID、名称等(这里暂时仅考虑简单属性)。
而数据库由多个实体集组成,每个实体集包含任意数量的同类型实体。
在 ER 图中,实体集用一个矩形表示,矩形分为两部分:上半部分显示实体集的名称,下半部分列出该实体集的所有属性名称。
联系集
实体之间关联的集合称为「联系集」,由多个具有相同类型联系的实例组成。
它用来表示实体之间的关系,例如「医生诊治病人」或「学生选修课程」,可以分为一对一、一对多或多对多。
联系是多个实体之间的相互关联,联系集是相同类型联系的集合。
在 ER 图中,联系集用菱形表示,菱形通过线条连接到多个不同的实体集。例如,学生和导师之间的关联可以表示为「指导」联系,医生和病人之间的关联可以表示为「诊治」联系。
在业务模型中,一个联系表示在实际场景中的关系。例如,一个教师ID为100的老师和一个学生ID为 101的实例共同参与到一个「教学」联系中。
联系也可以具有描述性属性,用来进一步描述联系的特征。
学生与课程之间的「选修」联系可以拥有「选修时间」作为其描述性属性。
在 ER 图中,联系的属性通过一个分割的矩形表示,并用虚线连接到表示联系的菱形。一个联系集可以拥有多个描述性属性。
联系集通常只显示在一个位置,避免在多个位置重复出现。
如果实体集需要在多个位置出现,其属性应只在首次出现时显示,后续仅显示实体集名称,不带属性,以减少重复信息,并避免因重复显示导致属性不一致的问题。
二元联系集是涉及两个实体集的联系集。数据库系统中的大多数联系集属于二元联系集。
学生与课程之间的「选修」关系或医生与病人之间的「诊治」关系。
有时,联系集可能涉及多于两个实体集。参与联系集的实体集数量被称为联系集的「度」。
复杂属性
在 ER 模型中使用的属性可以按照如下的属性类型来进行描述,主要有三种「简单和复合」「单值和多值」「派生属性」等。
简单和复合属性
简单属性是不可分割的基本属性,例如学号(Student ID)就是简单属性。
复合属性可以被分解为多个部分,例如地址(Address)可以被划分为城市(City)、街道(Street)和邮编(Postal Code)。
在设计模型时,使用复合属性是一种好的选择,因为它能将相关的属性整合起来,让模型更加清晰。
单值和多值属性
单值属性是指每个实体的某个属性只有一个值,例如学生的学号对学生来说就是唯一值,这种属性被称为单值属性。
多值属性是指某个属性可能对应一组值,例如教师的电话号码可能有一个或多个,不同教师的电话号码数量也可能不同,这种属性被称为多值属性。
派生属性
派生属性的值可以通过其他属性或实体推导出来。
比如说,教师指导的学生人数可以通过统计教师与相关学生实体的数量得出。
或者年龄可以通过出生日期和当前日期计算得出。
派生属性的值无需存储,而是在需要时动态计算。
映射基数
一个实体通过某个联系集可以关联到其他实体的数量,通常用来描述二元联系集中的实体关联关系。
一对一
A 集中的一个实体最多只能与 B 集中的一个实体相关联(一个人对应唯一的身份证号码)。
一对多
A 集中的一个实体可以与 B 集中的多个实体相关联,但 B 集中的一个实体只能与 A 集中的一个实体相关联(一个老师可以教多个学生,但每个学生只能有一个班主任)。
多对一
A 集中的多个实体可以与 B 集中的同一个实体相关联,而 B 集中的一个实体只能与 A 集中的一个实体相关联(多个学生可以被分配到同一个班级,但每个学生只能属于一个班级)。
多对多
A 集中的一个实体可以与 B 集中的多个实体相关联,同时 B 集中的一个实体也可以与 A 集中的多个实体相关联(一个学生可以选修多门课程,每门课程也可以由多个学生选修)。
在 ER 图的表示法中,我们使用有向线段或非有向线段来表示联系集之间约束。
一对一
当表示一对一联系时,我们从两个实体集之间画一条有向线段,表示一个实体集中的每个实体最多只能与另一个实体集中的一个实体关联。
例如,一位教师最多可以指导一名学生,并且一名学生最多只能有一位导师。
一对多
一个实体集到联系集画一条有限的线段,表示一个实体集中的一个实体可以与另一个实体集中的多个实体关联。
多对一
一个实体集到联系集画一条有向线段,表示一个实体集中的一个实体可以与另一个实体集中的多个实体相关联。
多对多
从两个实体集到联系集画一条无向线段,表示两个实体集中的实体可以相互关联,且一个实体集中的多个实体可以与另一个实体集中的多个实体关联。
全部参与
在 ER 图的表示法中,如果一所大学要求每名学生至少有一位导师,表示这种关系时,可以通过在模型中设置联系集来描述学生与导师之间的关联。
学生与导师的关系
每个学生(student实体)必须通过advisor联系集与至少一位导师相关联。
在这种情况下,student实体集与advisor联系集之间的关联是全体参与,即每个学生都必须有一位导师,表示为全部参与。
教师的参与
对于导师(teacher实体),不是每位教师都需要指导学生,因此在advisor联系集中的参与是部分参与,即只有一些教师会指导学生。
在 ER 图中,双线用于表示一个实体在联系集中是全部参与的,而单线则表示部分参与。
在概念设计阶段,数据库设计者根据这些需求,把需求转化成数据库的概念模型。
这个阶段开发出来的模式,就是为企业提供一个详细的框架。从关系模型的角度来看,概念设计阶段的重点是确定数据库应该包含哪些数据属性,并且决定如何将这些属性组织到不同的表里。
*请认真填写需求信息,我们会在24小时内与您取得联系。