FChao
发布于 2026-05-16 / 0 阅读
0
0

数据库系统工程师⑱:案例题1-ER图分析

E-R图知识回顾

  • 实体(Entity):一张表

    • 对应现实世界的“对象”,有属性(Attributes)

    • 例如:供应商表,里面有供应商诸多信息、零件表

    • E-R图中通常用矩形表示

  • 属性(Attribute):表中的字段

    • 实体或联系的特征

    • 例如:供应商的名称、地址、电话

    • 用椭圆表示,连线到它所属的实体或联系

  • 联系(Relationship)

    • 实体之间的关系,是描述‘谁和谁发生了什么事’的实体,联系属性总是依赖于多个实体

    • 例如:供应商和零件之间有采购的关系,有一张采购表,里面的外键分别来自供应商和零件表。

    • 用菱形表示,可以有自己的属性(例如采购数量、采购日期)

    • 如果一个表包含多个实体的主键作为外键,通常这个表就是联系表。

    • 我们在分析题目的时候发现,如果一个实体和另一个实体有多对多联系→ 必然需要联系表。

      • 1对1是可以完美写在一张表里面

      • 一对多考虑冗余需要拆分,但是可以用外键来关联两张表

      • 多对多联系无法被表完整存储,需要新构造一个中间表

1.

【说明】
某新能源汽车公司为了提升效率,需要开发一个汽车零件采购系统。请根据下述需求描述完成该系统的数据库设计。
【需求描述】
(1)记录供应商的信息,包括供应商的名称、地址和一个电话。
(2)记录零件的信息,包括零件的编码、名称和价格。
(3)记录车型信息,包括车型的编号、名称和规格。
(4)记录零件采购信息。某个车型的某种零件可以从多家供应商采购,某种零件也可以被多个车型采用,某家供应商也可以供应多种零件:还包括采购数量和采购日期。
【概念结构设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图1-1所示。

【逻辑结构设计】
根据概念结构设计阶段完成的实体联系图,得出如下关系模式(不完整):
供应商(名称,地址,电话)

零件(编码,名称,价格)

车型(编号,名称,规格)
采购(车型编号,供应商名称,(a),,(b),采购日期)

【问题1】(5分)
根据问题描述,补充图1-1的实体联系图(不增加新的实体)

考试的时候必须选椭圆工具不要选错成圆角矩形了!!

某个车型的某种零件可以从多家供应商采购,某种零件也可以被多个车型采用,某家供应商也可以供应多种零件:还包括采购数量和采购日期。

说明车型 ↔ 零件是多对多关系

零件 ↔ 供应商是多对多关系

这三个实体之间都需要中间联系

题目明确说:还包括采购数量和采购日期。

因此采购关系是:采购(车型编号, 供应商名称, 零件编码, 采购数量, 采购日期)。车型编号、供应商名称、零件编码都是外键采购数量和采购日期才是自己的属性。


关系线上的参与度/基数

实现、虚线和圈Φ

首先,我们从表联系实际看,采购(车型编号, 供应商名称, 零件编码, 采购数量, 采购日期)。发生一次采购记录的时候,有可能车型、供应商、零件不存在吗?这不符合现实,所以说每次采购记录都必然存在这三,只要有表记录存在,它们最少也是出现一次,因此它们是实线。

如果是存在某种情况,一个实体可能在联系中不存在,那就是可能出现0此,线上有圆圈Φ。虚线表示弱实体暂不讨论。

参与度(Min-Max)描述的是:

一个实体的单个实例在某个关系(联系)中可能出现的次数或必须参与的情况,所以,标注在实体端,而不是菱形的联系端。

(联系是多个实体间的抽象关联,它没有现实存在的数量限制,分析它没有意义)

车型端:

问题:每个特定车型在采购这个关系里至少/最多参与多少次?

每个车型至少采购1种零件吗? → 是,车辆在表中最少出现一次(最小=1)

每个车型可能采购多种零件吗? → 是,同一车辆采购多少次就能在表中出现多少次(最大=*)

所以在车型端,有标识1,*。但是最小参与度一般省略不写,故标记*号。

由此逻辑可得,只要产生联系的记录,零件和供应商均是在表中至少出现一次,可出现任意次,因此均标记为*

哪怕实体每次出现都是同一个值,就是说联系表里面出现的总是同一辆车,那也是多次。我们看的是实体出现的次数,不是实体的属性有出现了多少种类!

【问题2】(3分)
补充逻辑结构设计结果中的(a)、(b)两处空缺,并标注主键和外键完整性约束。

(a)零件编码

(b)采购数量

主键:(车型编号,供应商名称,零件编码,采购日期)

外键:车型编号,供应商名称,零件编码

首先由于车型、供应商、零件互相之间的多对多关系,它们谁都无法单独标识一行(光是一对多都没发标识一行了),候选键需要它们三个都在其中,但是我们分析还有一个不同日期,车型供应商零件编码相同的情况,只能多加上这个属性,得是它们四个才能成为主键。

E-R图新增实体/关系模式

【问题3】(7分)
该汽车公司现新增如下需求:记录车型在全国门店的销售情况。门店信息包括门店的编号、地址和电话:销售包括销售数量和销售日期等。
对原有设计进行以下修改以实现该需求:
(1)在图1-1中体现门店信息及其车型销售情况,并标明新增的实体和联系,及其必要属性。
(2)给出新增加的关系模式,并标注主键和外键元整性约束。

首先根据题目,门店这个实体有属性编号、地址、电话

“销售"不是一个实际存在的实体,它是门店和汽车之间产生的销售联系,它有自己的属性:销售数量和销售日期

汽车公司的门店和车型的销售情况和零件、零件的供应商没有关联

每次产生销售记录,必须有真正存在的车和门店,因此是实线

按照现实逻辑车可以在多个门店有卖,一个门店有多辆车。它们都可以在联系表中出现一次或多次。因此均有*星号

一个门店可售出多种车型 → 门店端在表中出现多次:*

一个车型可在多个门店销售 → 车型端在表中出现多次:*

销售(门店编号,车型编号,销售数量,销售日期)。主键:(门店编号,车型编号,销售日期);外键:门店编号,车型编号。

门店(门店编号,地址,电话)。主键:门店编号;外键:无。

2.

【说明】
某市为了规范疫苗接种工作,提升效率,并为抗击疫情提供疫苗接种数据支撑,需要开发一个信息系统。请根据下述需求描述完成该系统的数据库设计。
【需求描述】
(1)记录疫苗供应商的信息,包括供应商名称、地址和一个电话。
(2)记录接种医院的信息,包括医院名称、地址和一个电话。
(3)记录被接种者个人信息,包括姓名、身份证号和一个电话。
(4)记录接种者的疫苗接种信息,包括接种医院信息、被接种者信息、疫苗供应商名称和接种日期。

为了提高免疫力,接种者可能需要进行多次疫苗接种(每天最多接种一次),但每次都可以在全市任意一家医院进行疫苗接种。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图1-1所示。

【逻辑结构设计】
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整 ):
供应商(供应商名称,地址,电话 )
医院(医院名称,地址,电话)
供货(供应商名称,(a),供货内容)
被接种者(姓名,身份证号,电话)
接种(被接种者身份证号,(b),医院名称,供应商名称)

从关系模式看关系线

【问题1】(4分)
根据问题描述,补充图1-1的实体联系图(不增加新的实体 )。

第一第二问同时分析得知接种日期是接种自己的属性,接种除了被接种者和医院,要从关系模式中看见:接种联系包括了供应商名称这个外键,必须和供应商有连线!!

它们三者均在此联系表记录中至少出现一次,可出现多次记录。因此是实现,参与度为*

被接种者可以去任意医院,医院当然有多个被接种者。

题目没有显示告诉我们供应商,但是我们知道供应商在这个联系中接种多少次就出现多少次,因此是*

这里的"多次"指的是实体在联系中出现的记录条数,而不是属性值的种类数。即使每次都是同一个值,只要它在联系表中出现了多行,就意味着该实体参与了多次联系。
【问题2】(4分)
补充逻辑结构设计结果中的(a)、(b)两处空缺,并标注主键和外键完整性约束。

供货(供应商名称,(a),供货内容)

供货这个联系,它自己的属性供货内容已经写在关系模式里了,剩下的肯定是联系和两端实体的外键-主键关系,因此a肯定是医院的主键,医院名称

接种(被接种者身份证号,(b),医院名称,供应商名称)

题目:记录接种者的疫苗接种信息,包括接种医院信息、被接种者信息、疫苗供应商名称和接种日期。

接种日期没出现,b是接种日期

供应商,主键:供应商名称

医院,主键:医院名称

供货,主键:供应商名称,医院名称;外键:供应商名称,医院名称

被接种者,主键:被接种者身份证号

被接种者一天接种一次这个信息的作用就是:作为主属性来标识同一个人在不同天接种的情况

接种,主键: (被接种者身份证号,接种日期);外键:被接种者身份证号,医院名称,供应商名称


【问题3】(7分)
若医院还兼有核酸检测的业务,检测者可能需要进行多次核酸检测(每天最多检测1次 ),但每次都可以在全市任意一家医院进行检测。
请在图1-1中增加“被检测者”实体和相应的属性、医院和被检测者之间的“检测”联系和必要的属性,并给出新增加的关系模式。
“被检测者”实体包括姓名、身份证号、住址和一个电话。“检测”联系需要包括检测日期和检测结果等。

题目信息:“被检测者”实体包括姓名、身份证号、住址和一个电话

“检测”联系需要包括:检测日期、检测结果,它首先肯定是医院和被检测者之间的联系,和供应商有联系吗?题目没有任何证明存在。

被检测者存在进行多次检测的可能(单个实例可以多次参与联系),医院可以无数次被不同的被检测者选择而出现,医院和检测者都是*(答案这里漏画了)

被检测者(姓名,身份证号,住址,电话 ),主键:身份证号。

检测(被检测者身份证号,医院名称,检测日期,检测结果 ),主键:(被检测者身份证号,检测日期);外键:被检测者身份证号,医院名称。

看到每天最多检测一次就要有敏锐意识!!每次选取主键的时候要注意能不能缩小,实际上某个患者某一天只会去一个医院,因此医院是可以省去的


评论