E-R模型设计实战:3步完成物资管理系统概念结构设计(附完整ER图)
E-R模型设计实战物资管理系统概念结构设计三步法1. 理解E-R模型的核心要素E-R模型Entity-Relationship Model作为数据库概念设计的核心工具由实体、属性和联系三大要素构成。不同于传统理论讲解我们直接从实战角度拆解这些要素在物资管理系统中的具体表现。实体识别要点仓库实体包含仓库号主键、面积、电话号码等属性零件实体包含零件号主键、名称、规格、单价等属性供应商实体包含供应商号主键、姓名、地址等属性项目实体包含项目号主键、预算、开工日期等属性职工实体包含职工号主键、姓名、年龄等属性属性设计原则1. **原子性**属性不可再分如地址应拆分为省/市/街道 2. **直接关联**属性必须直接描述所属实体 3. **避免冗余**相同属性不在多个实体重复出现 4. **业务约束**如单价必须0电话号码需特定格式联系类型判断技巧业务场景联系类型示例说明职工-仓库工作关系1:n一个仓库有多个职工职工仅属一个仓库仓库-零件存储关系m:n需通过库存联系实体记录数量供应商-项目-零件供应关系m:n:p三元联系需单独设计联系实体提示当发现属性值需要额外描述时如库存量说明应该将简单属性升级为联系实体2. 三步设计法实战演练2.1 第一步业务需求实体化通过需求分析会议我们提取出物资管理系统的核心业务语句供应商为项目提供多种零件零件分类存储在不同仓库职工负责特定仓库的管理工作实体-属性映射表| 实体 | 主键 | 常规属性 | 特殊约束 | |----------|-----------|------------------------------|------------------------| | 仓库 | 仓库号 | 面积, 电话号码 | 面积需≥50㎡ | | 零件 | 零件号 | 名称, 规格, 单价, 描述 | 单价精度保留2位小数 | | 供应商 | 供应商号 | 姓名, 地址, 电话号码, 账号 | 账号需唯一校验 | | 项目 | 项目号 | 预算, 开工日期 | 预算≥10000元 | | 职工 | 职工号 | 姓名, 年龄, 职称 | 年龄范围18-65岁 |2.2 第二步关系网络构建根据业务规则建立实体间的关联仓库↔零件多对多关系产生联系实体库存添加属性库存量erDiagram WAREHOUSE ||--o{ INVENTORY : 存放 INVENTORY }o--|| PART : 对应 INVENTORY { string warehouse_id FK string part_id FK int quantity }仓库↔职工一对多关系在职工实体中添加外键所属仓库号领导关系通过职工实体的自引用实现供应商↔项目↔零件三元多对多关系创建联系实体供应记录包含三个外键和供应日期、数量等属性关系设计检查清单[x] 每个m:n关系都转换为联系实体[x] 1:n关系的外键放置在多方实体[x] 自引用关系已明确标注如职工领导关系[x] 所有业务规则都能通过关系网络表达2.3 第三步ER图优化与验证通过Visio或Draw.io等工具绘制初始ER图后执行以下优化步骤冲突解决策略属性冲突统一所有日期字段为DATE类型命名冲突将姓名改为供应商名称/职工姓名结构冲突把仓库.保管员字段移除改用外键关系冗余检查方法-- 示例检查可推导数据 SELECT p.part_id, SUM(i.quantity) FROM parts p JOIN inventory i ON p.part_id i.part_id GROUP BY p.part_id;若可通过SQL计算得出的数据如总库存量则不应作为属性存储最终ER图特征包含5个实体矩形3个联系菱形库存/供应记录/领导关系所有属性以椭圆形连接关系基数明确标注1:n, m:n等3. 从概念模型到数据库实现3.1 模型转换规范按照以下规则将ER图转为关系模式实体转换CREATE TABLE warehouse ( warehouse_id VARCHAR(10) PRIMARY KEY, area DECIMAL(10,2) CHECK(area 50), phone VARCHAR(20) );联系转换1:n在多方表添加外键ALTER TABLE employee ADD COLUMN warehouse_id VARCHAR(10) REFERENCES warehouse(warehouse_id);m:n创建关联表CREATE TABLE inventory ( warehouse_id VARCHAR(10) REFERENCES warehouse(warehouse_id), part_id VARCHAR(10) REFERENCES part(part_id), quantity INT CHECK(quantity 0), PRIMARY KEY (warehouse_id, part_id) );3.2 典型业务场景映射场景查询某项目的零件供应商列表SELECT DISTINCT s.supplier_name FROM supplier s JOIN supply_record sr ON s.supplier_id sr.supplier_id JOIN project p ON sr.project_id p.project_id WHERE p.project_name 2024办公楼建设;场景计算各仓库存储价值SELECT w.warehouse_id, SUM(i.quantity * p.unit_price) AS total_value FROM warehouse w JOIN inventory i ON w.warehouse_id i.warehouse_id JOIN part p ON i.part_id p.part_id GROUP BY w.warehouse_id;3.3 性能优化建议索引策略CREATE INDEX idx_part_name ON part(part_name); CREATE INDEX idx_supply_date ON supply_record(supply_date);视图封装CREATE VIEW warehouse_inventory_view AS SELECT w.warehouse_id, p.part_name, i.quantity FROM warehouse w JOIN inventory i ON w.warehouse_id i.warehouse_id JOIN part p ON i.part_id p.part_id;数据归档设计CREATE TABLE supply_record_archive ( -- 与原表相同结构 archive_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );4. 常见问题解决方案4.1 设计陷阱规避问题1过度使用属性错误做法在零件实体添加仓库列表字段正确方案通过库存联系实体表达问题2忽略业务约束-- 缺少约束的建表语句 CREATE TABLE employee ( employee_id VARCHAR(10), age INT -- 应添加 CHECK(age BETWEEN 18 AND 65) );问题3基数误判典型错误将仓库-零件误设为1:n关系验证方法确认同种零件可存多个仓库4.2 设计模式扩展层级结构处理erDiagram EMPLOYEE ||--o{ EMPLOYEE : 领导 EMPLOYEE { string employee_id PK string name string position string manager_id FK }历史数据追踪ALTER TABLE inventory ADD COLUMN ( last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_by VARCHAR(10) REFERENCES employee(employee_id) );4.3 模型演进策略当新增设备租赁业务时新增租赁实体建立与供应商的多对多关系添加租赁状态、期限等属性保持原有模型兼容性CREATE TABLE lease ( lease_id VARCHAR(10) PRIMARY KEY, start_date DATE, end_date DATE CHECK(end_date start_date), status ENUM(active, expired, terminated) ); CREATE TABLE supplier_lease ( supplier_id VARCHAR(10) REFERENCES supplier(supplier_id), lease_id VARCHAR(10) REFERENCES lease(lease_id), equipment_details TEXT, PRIMARY KEY (supplier_id, lease_id) );

相关新闻

深度学习计算图与反向传播原理详解:从手动实现到梯度流动

深度学习计算图与反向传播原理详解:从手动实现到梯度流动

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个深度学习框架中的核心概念:计算图与反向传播。对于任何想要深入理解神经网络训练过程,特别是…

2026/7/6 2:24:13阅读更多 →
SAR回波模型与深度学习成像:从数学公式到PyTorch数据生成器(含5类场景)

SAR回波模型与深度学习成像:从数学公式到PyTorch数据生成器(含5类场景)

SAR回波模型与深度学习成像:构建PyTorch数据生成器的工程实践1. 从理论模型到数据流水线传统SAR成像理论将回波信号建模为复杂的数学表达式,而深度学习时代需要将其转化为可微分的数据生成流程。我们首先解构经典回波模型的组件:class SARSig…

2026/7/6 2:19:12阅读更多 →
AI编程时代程序员生存指南:从工具实操到思维转变的实战策略

AI编程时代程序员生存指南:从工具实操到思维转变的实战策略

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近和不少同行交流,发现一个挺有意思的现象:一边是各种“AI编程月入十万”、“用AI接单暴富”的帖子满天飞&a…

2026/7/6 2:19:12阅读更多 →
如何完整导出QQ空间说说:GetQzonehistory终极指南

如何完整导出QQ空间说说:GetQzonehistory终极指南

如何完整导出QQ空间说说:GetQzonehistory终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想完整保存QQ空间的所有说说,却苦于没有合适的工具&am…

2026/7/6 7:09:37阅读更多 →
【JAVA毕设源码分享】基于Web的学生宿舍管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于Web的学生宿舍管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/6 7:09:37阅读更多 →
FR4 板材 2.4GHz 功分器实测:ADS 版图仿真与 0805 电阻引入的 3dB 性能劣化分析

FR4 板材 2.4GHz 功分器实测:ADS 版图仿真与 0805 电阻引入的 3dB 性能劣化分析

FR4板材2.4GHz功分器工程实践:从理想模型到0805封装电阻的3dB性能劣化深度解析1. 威尔金森功分器的工程价值与设计挑战在射频前端设计中,威尔金森功分器作为信号分配的核心器件,其性能直接影响系统整体指标。当我们在FR4板材(εr4…

2026/7/6 7:09:37阅读更多 →
共振解调软硬件第一版样机功能完成调试

共振解调软硬件第一版样机功能完成调试

共振解调软硬件第一版样机 共振解调模块调试完成基于硬件共振解调技术,实现八种轴承及旋转部件故障的精准识别,仅需低采样率即可完成高频故障特征提取。Overview样机调试成果概览经过多轮调试,第一版样机的共振解调模块已全面完成软硬件联调&…

2026/7/6 7:09:37阅读更多 →
模仿学习 3 大流派对比:GAIL vs BC vs IRL,从原理到样本效率分析

模仿学习 3 大流派对比:GAIL vs BC vs IRL,从原理到样本效率分析

模仿学习三大流派深度解析:从行为克隆到生成对抗的演进之路1. 模仿学习的技术演进图谱当我们需要训练智能体完成复杂任务时,模仿学习提供了一条绕过繁琐奖励设计的捷径。这项技术从早期的行为克隆起步,历经逆强化学习的理论突破,最…

2026/7/6 7:09:37阅读更多 →
工业级定时系统设计:MIC1557与PIC18F25K40硬件方案

工业级定时系统设计:MIC1557与PIC18F25K40硬件方案

1. 项目概述:构建工业级定时系统的必要性在工业自动化、医疗设备和基础设施监控等关键领域,定时系统的可靠性直接决定着整个系统的稳定性。一个典型的案例是某污水处理厂的曝气控制系统,由于定时器误差累积导致曝气周期紊乱,最终造…

2026/7/6 7:04:37阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →