【高效学数据库】数据库设计 & E-R模型

本专栏将从基础开始,循序渐进的讲解数据库的基本概念以及使用,希望大家都能够从中有所收获,也请大家多多支持。
专栏地址: 数据库必知必会
如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦

实体集介绍

数据库可被建模为:实体集合和实体间联系。实体是客观存在的对象并且与其他对象可区分,例如: 特定的人,公司,事件,植物,具有属性,例如:人具有姓名和地址,并且实体集是相同类型的实体的集合,他们具有相同的性质,例如:所有人的集合,所有公司的集合。

实体集的图例如下,以instructor(导师)为例:

image-20220523194802514

实体用一个属性集合来表示,即实体集中所有成员都具有的描述性特性,域表示所有属性允许的值的集合。属性的种类有以下几种:

  • 简单属性与复合属性

  • 单值属性与多值属性

    ​ 例,多值属性:phone-numbers

  • 派生属性

    • 可由其他属性计算得到
    • 例,给定出生日期可计算出年龄
    • 基属性或存储属性

复合属性的图例如下:

image-20220523195051579

联系是指多个实体之间的练习,联系集是相同类型联系的集合。

例如导师和学生的关系,一个学生有一个导师,一个导师可以有多个学生,导师的id用s_ID表示,student的id用i_ID表示,导师和学生的联系可以用如下数据表表示:

advisor(s_ID,i_ID)

一般联系集存放的是两个表的主键,对应的图示如下:

image-20220523195630931

联系集也可具有属性,例如导师和学生双选的日期,如下图所示:

image-20220524080201393

联系集的度指的是参加联系的实体集的个数,涉及两个实体集的联系集称为二元的,联系集可以涉及多于两个的实体集,例:一个student在每个项目上最多只能有一位导师,如下图,包含三 个实体集instructor、student和project(三元联系)(多于两个实体集之间的联系较少见,数据库系统中的联系集一般多为二元的)

image-20220524080724448

二元联系集的映射基数有以下几种情况:

  • 一对一,如:就任总统(总统,国家)
  • 一对多,如:分班情况(班级,学生)
  • 多对一,如:就医(病人,医生)
  • 多对多,如:选课(学生,课程)

键、码的概念

实体集的超码是能够唯一标识每个实体的一个或多个属性,候选码是实体集的最小超码,候选码可能存在多个,我们只会选择一个候选码作为主码或主键

例:instructor (ID,name,dept_name,salary

候选码:ID

超码:{ID},{ID, name},{ID,…}

弱实体集介绍

依赖于其他实体集的实体集都叫做弱实体集,例如课程实体集(course)和开课学期实体集(section),所开课程需要依赖于课程实体集,因为没有课程,也就没有开课信息,如下图所示:

image-20220524184159954

E-R图

E-R图如下图所示,矩形代表实体集,有阴影的第一部分包含实体集的名字, 第二部分包含实体集中所有属性的名字,菱形代表联系集,未分割的矩形代表联系集的属性。构成主码的属性以下划线标明,线段将实体集连接到联系集:

image-20220524120119312

常用的E-R图符号如下图所示:

image-20220524181039998

image-20220524181050155

其他可选择的E-R图表示法如下图所示:

image-20220524181319821

image-20220524181403508

参加联系的实体集不必是互不相同的

例,下图给出了course实体集和preq联系集之间的角色标识course_id和 prereq_id:

image-20220524181720669

上图中course_id表示课程id,prereq_id表示表示学习某一个课程的前置课程。

在开发中一般我们使用二元联系,任何非二元联系都能转换成二元联系,例,将如下非二元联系schooling 转换成二元联系

image-20220524182601205

特化用从特化实体指向另一方实体的空心箭头来表示。这种关系为ISA关 系,代表“is a”(“是一个”)。例如,一个教师“是一个”雇员:

image-20220524184509435

设计数据库的步骤

设计数据库的步骤如下图所示:

image-20220524185203562

例:

学生学习某门课程。每个学生都有学号,姓名,年龄和性别属性。 每门课程都有课程编号,课程名,学分和上课教室编号属性。每个学生可以是本科生或研究生。对于每一个本科生,我们想记录他/她 的学习年份,平均绩点,以及(可能是多个)电子邮箱。对于每一个研究生,我们要记录他/她的导师的名字,以及电子邮箱(可能是多个)。此外,每门课程有一名研究生作为课程助教,我们要记录助教的开始和结束时间(例如,开始于2022年3月10日,结束于2022 年6月30日)。绘制E-R图。

image-20220524193213858

猜你喜欢

转载自blog.csdn.net/Learning_xzj/article/details/124961394