设计一个商品信息管理数据库,其中每个业务员有工号、姓名,每种商品有商品编号、商品名称、价格、库存数量。每个业务员可以销售多种商品,每种商品可以由多个业务员销售,销售记录有商品编号、数量、销售日期、工号。每种商品可以由多个供应商供应,每个供应商有供应商编号、供应商名称、联系电话。每个供应商可以供应多种商品,每个供应记录有供应商编号、商品编号、数量、价格、供应日期。根据题目要求(1)画出E-R图;(2)写出关系模式[1];
设计一个商品信息管理数据库,其中每个业务员有工号、姓名,每种商品有商品编号、商品名称、价格、库存数量。每个业务员可以销售多种商品,每种商品可以由多个业务员销售,销售记录有商品编号、数量、销售日期、工号。每种商品可以由多个供应商供应,每个供应商有供应商编号、供应商名称、联系电话。每个供应商可以供应多种商品,每个供应记录有供应商编号、商品编号、数量、价格、供应日期。 根据题目要求 (1)画出E-R图; (2)写出关系模式[1];
题目解答
答案
我们根据题目要求,逐步分析并完成两个任务:(1)画出E-R图(文字描述E-R图结构);(2)写出关系模式。由于无法直接绘图,我将用文字详细描述E-R图的结构。
(1)E-R图设计(文字描述)
E-R图(实体-联系图[2])包含实体、属性和联系。
一、实体及其属性
-
业务员(Salesperson)
- 属性:工号(主键)、姓名
-
商品(Product)
- 属性:商品编号(主键)、商品名称、价格、库存数量
-
供应商(Supplier)
- 属性:供应商编号(主键)、供应商名称、联系电话
二、联系
-
销售(Sells):业务员与商品之间的多对多联系
- 一个业务员可以销售多种商品
- 一种商品可以由多个业务员销售
- 联系属性:数量、销售日期
- 参与实体:业务员(工号)、商品(商品编号)
- 转换为一个独立的联系实体:销售记录(SalesRecord)
-
供应(Supplies):供应商与商品之间的多对多联系
- 一个供应商可以供应多种商品
- 一种商品可以由多个供应商供应
- 联系属性:数量、价格(此处为供应价格,可能与销售价格不同)、供应日期
- 转换为一个独立的联系实体:供应记录(SupplyRecord)
E-R图结构总结(文字描述)
-
实体:
- 业务员(工号,姓名)
- 商品(商品编号,商品名称,价格,库存数量)
- 供应商(供应商编号,供应商名称,联系电话)
-
联系:
- 业务员 —— 销售 —— 商品
- 多对多联系,转化为“销售记录”实体
- 销售记录(工号,商品编号,数量,销售日期)
- 供应商 —— 供应 —— 商品
- 多对多联系,转化为“供应记录”实体
- 供应记录(供应商编号,商品编号,数量,价格,供应日期)
- 业务员 —— 销售 —— 商品
-
所有联系均为多对多,因此都需要通过联系实体(即关系表)来实现。
(2)关系模式设计
将E-R图转换[3]为关系模式(即数据库表结构),每个实体和联系都转化为一个关系(表),并标明主键和外键。
1. 业务员(Salesperson)
- 关系模式:
Salesperson(工号, 姓名) - 主键:工号
2. 商品(Product)
- 关系模式:
Product(商品编号, 商品名称, 价格, 库存数量) - 主键:商品编号
3. 供应商(Supplier)
- 关系模式:
Supplier(供应商编号, 供应商名称, 联系电话) - 主键:供应商编号
4. 销售记录(SalesRecord)
(对应业务员与商品之间的销售联系)
- 关系模式:
SalesRecord(工号, 商品编号, 数量, 销售日期) - 主键:(工号, 商品编号, 销售日期)
(因为同一业务员可能在不同时间多次销售同一种商品,日期可区分) - 外键:
- 工号 → Salesperson(工号)
- 商品编号 → Product(商品编号)
> 注:也可以将“销售记录编号”设为唯一主键,但题目未提供,因此采用组合主键。
5. 供应记录(SupplyRecord)
(对应供应商与商品之间的供应联系)
- 关系模式:
SupplyRecord(供应商编号, 商品编号, 数量, 价格, 供应日期) - 主键:(供应商编号, 商品编号, 供应日期)
(同一供应商可在不同时间多次供应同一种商品) - 外键:
- 供应商编号 → Supplier(供应商编号)
- 商品编号 → Product(商品编号)
最终关系模式总结(共5个表)
-
Salesperson(工号, 姓名)
- 主键:工号
-
Product(商品编号, 商品名称, 价格, 库存数量)
- 主键:商品编号
-
Supplier(供应商编号, 供应商名称, 联系电话)
- 主键:供应商编号
-
SalesRecord(工号, 商品编号, 数量, 销售日期)
- 主键:(工号, 商品编号, 销售日期)
- 外键:工号 → Salesperson(工号),商品编号 → Product(商品编号)
-
SupplyRecord(供应商编号, 商品编号, 数量, 价格, 供应日期)
- 主键:(供应商编号, 商品编号, 供应日期)
- 外键:供应商编号 → Supplier(供应商编号),商品编号 → Product(商品编号)
附加说明
- 库存数量更新:虽然题目中商品有“库存数量”,但在本关系模式中,库存应通过供应记录(增加库存)和销售记录(减少库存)动态计算。若要求实时库存,可在Product表中保留该字段,并通过触发器[4]或应用逻辑维护一致性。
- 所有多对多关系均已通过联系表解决,符合规范化[5]要求(至少达到第三范式[6])。
✅ 答案总结
(1)E-R图(文字描述):
- 实体:业务员、商品、供应商
- 联系:
- 业务员与商品之间通过“销售记录”多对多连接
- 供应商与商品之间通过“供应记录”多对多连接
- 所有联系均带属性,需转化为独立关系
(2)关系模式(共5个):
$\boxed{ \begin{aligned}&\text{Salesperson}(工号, 姓名) \\&\text{Product}(商品编号, 商品名称, 价格, 库存数量) \\&\text{Supplier}(供应商编号, 供应商名称, 联系电话) \\&\text{SalesRecord}(工号, 商品编号, 数量, 销售日期) \\&\text{SupplyRecord}(供应商编号, 商品编号, 数量, 价格, 供应日期)\end{aligned} }$
- 主键分别为各表中对应的标识属性或组合属性
- 外键关系如上述说明
此数据库设计[7]满足题目全部业务需求,结构清晰,符合关系数据库设计规范。
解析
本题主要考查数据库设计中的E - R图设计和关系模式设计。解题思路如下:
- E - R图设计
- 确定实体:根据题目描述,明确存在业务员、商品和供应商这三个实体。
- 确定实体属性:
- 业务员实体具有工号和姓名属性,其中工号可作为唯一标识,设为主键。
- 商品实体具有商品编号、商品名称、价格和库存数量属性,商品编号可作为唯一标识,设为主键。
- 供应商实体具有供应商编号、供应商名称和联系电话属性,供应商编号可作为唯一标识,设为主键。
- 确定联系:
- 业务员和商品之间存在多对多的销售联系,一个业务员可以销售多种商品,一种商品可以由多个业务员销售,该联系具有数量和销售日期属性,将其转换为独立的联系实体“销售记录”。
- 供应商和商品之间存在多对多的供应联系,一个供应商可以供应多种商品,一种商品可以由多个供应商供应,该联系具有数量、价格(供应价格)和供应日期属性,将其转换为独立的联系实体“供应记录”。
- 关系模式设计
- 实体转换为关系模式:将业务员、商品和供应商三个实体分别转换为对应的关系模式,即表结构,同时明确每个表的主键。
- 联系转换为关系模式:将“销售记录”和“供应记录”这两个联系实体也转换为关系模式,确定其主键和外键。外键用于建立表与表之间的关联,保证数据的一致性和完整性。