☰
基于SpringBoot的药品库存与进销存系统毕业设计源码(源码+lw+部署文档+讲解等)
2026/10/4 3:39:32 网站建设 项目流程

博主介绍:✌ 专注于VUE,小程序,安卓,Java,python,物联网专业,有18年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。

一、研究目的

本研究聚焦于药品库存与进销存管理的数字化转型,旨在通过构建基于SpringBoot框架的系统,实现药品全生命周期的可视化追踪与精准调度。当前,传统药品库存管理多依赖纸质记录或分散的电子表格,导致数据更新滞后、信息孤岛现象突出,进而影响库存周转率与采购决策的科学性。尤其在药品监管日趋严格的背景下,缺乏统一的数据平台不仅增加了合规成本,也提升了药品安全风险。为此,本研究计划搭建一套集成化、模块化的进销存系统,以满足现代药品管理对实时性、准确性与可追溯性的高标准要求。

系统设计将采用SpringBoot微服务架构,利用其快速开发与高可扩展性的优势,构建包括库存管理、采购管理、销售管理及报表分析等核心模块。通过RESTful API实现前后端分离,前端采用Vue.js或React框架进行交互式展示,从而提升用户体验与操作效率。数据层将使用MySQL或PostgreSQL数据库,并结合Redis缓存技术,确保高并发访问下的数据一致性与查询性能。为满足药品追溯需求,系统将内置批次号、有效期及生产厂家等属性,并支持条码扫描与二维码识别,实现从采购到销售的全链路追踪。

研究目标包括:一是实现药品库存的实时监控与自动预警机制,降低库存积压与过期损失;二是构建基于数据分析的需求预测模型,提升采购决策的科学性与精准度;三是提供合规报告生成模块,支持药监部门的审计与监管需求;四是通过系统化的数据治理,提升信息共享与协同效率。研究贡献在于将SpringBoot生态与药品管理业务深度融合,为中小型药品企业提供低成本、高可维护性的解决方案,并为后续在大数据、人工智能等领域的扩展奠定技术基础。

预期成果将包括:一份完整的系统设计文档与实现代码;一套可交付使用的药品进销存管理系统;一篇基于实验数据验证系统性能与业务价值的学术论文。通过本研究,期望为药品行业提供一种高效、透明、合规的库存管理模式,促进药品供应链的健康发展,并为相关领域的技术创新与应用推广提供可借鉴的经验与方法。

二、研究意义

本研究的意义体现在多维度的技术创新与社会价值提升。首先,在药品供应链管理领域,传统的人工记录与分散系统已难以满足日益增长的监管要求与运营效率需求,导致库存积压、过期损失以及药品安全风险显著增加。通过构建基于SpringBoot框架的进销存系统,可实现数据统一、实时更新与可视化展示,从而显著降低库存周转时间、提升采购决策精准度,并在合规审计中提供完整可追溯的记录,满足药监部门对药品全生命周期管理的严格标准。其次,该系统通过微服务架构与RESTful接口实现前后端分离,兼容多种终端与业务场景,具备高度可扩展性与易维护性,为中小型药企提供低成本、高性能的数字化升级路径,促进行业整体技术水平的提升。再次,系统内置批次号、有效期、生产厂家等关键属性,并支持条码扫描与二维码识别,实现从采购到销售的全链路追踪,为药品召回与安全预警提供技术支撑,显著增强公共健康保障能力。最后,通过对库存数据的实时分析与预测模型的构建,可为企业提供基于大数据的需求预测与库存优化方案,提升资源配置效率,降低运营成本,同时为学术界在供应链管理、数据挖掘与人工智能应用方面提供可验证的案例研究。

本研究亦具有深远的社会意义。药品安全关系到公众健康与生命安全,而系统化、数字化的库存管理能够及时发现并处理潜在风险,降低因过期或错误配药导致的医疗事故概率。与此同时,系统对数据完整性与可追溯性的强调,为监管部门提供了透明、高效的监督手段,有助于提升药品市场的公平竞争环境。经济层面而言,通过降低库存成本、提升周转率,企业可实现利润最大化,并将节省的成本投入研发与创新,从而形成良性循环。技术层面,本研究通过将SpringBoot生态与行业业务深度融合,验证了微服务架构在复杂业务场景下的可行性,为后续在医疗健康、物流管理等领域的技术推广提供了可复制、可扩展的范式。

综上所述,本研究不仅在技术实现层面推动了药品进销存系统的现代化升级,也在监管合规、公共安全与经济效益等多重维度产生积极影响。其成果将为药品行业提供一套高效、透明、可持续的管理框架,并为相关学科的交叉研究与应用实践奠定坚实基础。

三、国内外研究现状

国内外在药品库存与进销存系统研究领域均已形成多条技术路线,且各自取得了显著成果。总体来看,研究重点可划分为三大方向:一是系统集成与架构优化;二是数据驱动的决策支持;三是合规与安全保障。

在系统集成与架构优化方面,国外学者普遍采用微服务架构、容器化技术以及云原生理念,以提升系统弹性与可维护性。通过将业务模块拆分为独立服务,能够实现按需扩容、灰度发布及快速迭代。国内研究则侧重于基于SpringBoot的快速开发框架,将其与传统ERP系统进行深度集成,利用Spring Data JPA、MyBatis等持久化技术实现数据库操作的简化,并通过Actuator监控服务健康状态。两者共同关注的核心是如何在保证业务连续性的前提下,实现高并发访问与实时数据同步。

数据驱动的决策支持是当前研究热点之一。国外团队多利用大数据平台(如Hadoop、Spark)对历史库存、采购与销售数据进行挖掘,构建需求预测模型、库存优化算法及动态补货策略。国内研究则以机器学习为核心,结合时间序列分析与深度学习技术,对药品需求波动进行精准预测,并将预测结果通过RESTful API实时推送至前端展示。两者在算法精度与实现效率上均取得了较大进展,但在模型可解释性与业务可操作性方面仍存在差距。

合规与安全保障方面,国外研究多聚焦于区块链技术在药品溯源中的应用,通过分布式账本实现不可篡改的批次信息记录,提升监管透明度。国内则侧重于基于标准化数据模型(如HL7、FHIR)的信息互通与合规审计模块,利用Spring Security实现权限控制与日志审计,满足药监部门对数据完整性与可追溯性的严格要求。两者均强调在系统设计中嵌入合规检查点,以降低监管风险。

在技术成果层面,国外已有若干开源项目提供了完整的药品库存管理框架,支持多租户、分布式事务与弹性伸缩。国内则出现了多套基于SpringBoot的企业级解决方案,涵盖库存盘点、采购审批、销售报表等核心功能,并通过自研插件实现条码扫描、二维码识别与RFID读取。两者在功能完整性、性能表现与易用性方面均获得了业界认可。

尽管国内外研究已取得显著进展,但仍存在技术融合度不足、跨系统数据一致性难以保证以及对人工智能深度学习模型的可解释性关注不足等问题。未来研究可进一步探索微服务与区块链的协同治理、强化模型可解释性与业务决策的透明度,并通过标准化接口实现与医疗信息系统的无缝对接,以推动药品库存管理向更高效、更安全、更合规的方向发展。

四、预期达到目标及解决的关键问题

预期目标在于构建一套基于SpringBoot技术栈的药品库存与进销存系统,该系统能够实现药品全生命周期的实时可视化管理、精准需求预测以及合规审计支持,从而显著提升企业运营效率与药品安全保障。首先,系统应通过微服务架构将库存管理、采购审批、销售订单及报表分析等核心业务模块解耦,实现按需扩容与灰度发布,保证在高并发访问场景下的稳定性与可维护性;其次,系统需集成条码扫描、二维码识别及RFID读取等硬件接口,实现药品批次号、有效期及生产厂家信息的自动采集与校验,从而降低人工录入错误率并提升数据完整性;再次,系统应嵌入基于时间序列预测与机器学习算法的需求预测模型,为采购决策提供科学依据,并通过库存优化算法实现安全库存水平与周转率的平衡;最后,系统需提供合规报表生成模块,支持药监部门对药品进销存数据的实时审计与追溯查询,并通过权限控制与日志审计机制保障数据安全与可追溯性。

在实现上述目标的过程中,将面临若干关键技术问题。首要问题是如何在多租户环境下实现数据隔离与一致性,尤其是在分布式事务处理与缓存同步方面,需要设计可靠的补偿机制与最终一致性协议,以避免库存信息冲突与错误。其次,系统需兼容现有的企业资源计划(ERP)系统及药品管理信息系统,如何进行跨系统数据映射、实时同步与格式标准化,是实现无缝集成的核心挑战;第三,高并发访问场景下的性能瓶颈将主要集中在数据库读写压力与缓存失效策略上,需要通过读写分离、分表分库以及Redis等缓存技术来提升响应速度;第四,药品信息涉及个人健康与安全,数据隐私与安全性要求极高,如何在保证业务功能的前提下实现加密存储、访问控制与审计日志完整记录,是系统设计不可忽视的要点;第五,预测模型的可解释性与业务可操作性同样重要,如何将复杂的机器学习结果转化为易于理解的决策建议,并在系统中提供可视化解释界面,将直接影响模型在实际业务中的接受度。

为解决上述关键问题,本研究计划采用分布式事务框架(如Saga模式)与消息队列技术实现最终一致性;通过统一数据接口层与标准化数据模型(如HL7、FHIR)实现跨系统的数据映射与同步;在数据库层面引入分库分表与读写分离策略,并结合Redis缓存及Cache Aside模式降低数据库压力;在安全层面使用TLS加密传输、AES对称加密存储关键字段、RBAC权限模型以及审计日志链式记录;在预测模型方面采用LIME或SHAP等解释技术,将模型输出与业务规则相结合,并通过可视化仪表盘呈现预测结果与不确定性指标。通过上述技术路径,系统将实现高可用、高性能、合规安全的药品库存与进销存管理,为企业提供可靠的数据支撑与决策依据。

五、研究内容

本研究以构建基于SpringBoot技术栈的药品库存与进销存系统为核心目标,整体研究内容可划分为需求分析、系统架构设计、关键技术实现、性能评估与应用验证四大模块。首先,在需求分析阶段,将通过访谈与问卷方式获取药品企业在库存管理、采购审批、销售订单处理以及报表分析等方面的痛点与功能需求,并结合药监部门对药品溯源与合规审计的法规要求,形成系统功能规格说明书。随后,在系统架构设计阶段,将采用微服务架构模式,将业务层拆分为库存服务、采购服务、销售服务、报表服务以及通用基础设施服务,并通过Spring Cloud Gateway实现统一路由与鉴权;在数据层面引入分库分表策略与读写分离机制,使用MySQL或PostgreSQL作为主数据库,并配合Redis缓存实现热点数据的快速访问;在消息总线层面采用Kafka或RabbitMQ实现服务间异步通信,保证系统的可伸缩性与高可用性。

在关键技术实现阶段,首先针对库存管理模块,将设计基于条码扫描、二维码识别及RFID读取的硬件接口层,实现药品批次号、有效期及生产厂家信息的自动采集与校验;其次,在采购服务中引入基于时间序列预测与机器学习算法的需求预测模型,利用历史采购与销售数据训练LSTM或Prophet模型,并通过RESTful API将预测结果实时推送至前端展示;再次,在销售服务中实现订单管理、库存扣减与退货处理,并通过Saga模式实现跨服务的最终一致性;随后,在报表服务中集成Spring Batch进行批量数据处理,支持多维度报表生成与自定义查询,并提供可视化仪表盘展示库存周转率、采购成本及合规指标;在安全层面,将采用JWT鉴权、RBAC权限控制与TLS加密传输,并通过日志审计链记录关键操作,满足药监部门对数据完整性与可追溯性的监管要求。

在性能评估与应用验证阶段,将通过构建测试环境模拟高并发访问场景,对系统的响应时间、吞吐量以及数据库压力进行基准测试;同时,利用A/B测试方法验证需求预测模型对采购决策的影响,并通过药品库存周转率、过期损失率等关键指标评估系统改进效果;此外,将与现有ERP系统进行接口对接测试,验证数据映射与同步的完整性与一致性;最后,将在实际药品企业中部署试点,收集用户反馈并进行迭代优化,形成可推广的技术方案。

综上所述,本研究通过需求分析、系统架构设计、关键技术实现以及性能评估与应用验证四个层面,系统性地构建了一套高可用、高性能、合规安全的药品库存与进销存管理系统,为药品企业提供数字化转型的技术支撑,并为相关学术研究与行业实践提供可复制、可扩展的技术范式。

六、需求分析

用户需求方面,系统的主要使用者包括药房管理人员、采购主管、销售人员、系统管理员以及监管部门审计人员。药房管理人员需要能够实时查看各类药品的库存数量、批次信息及有效期,并在库存低于预设阈值或即将到期时获得自动提醒,以便及时补货或处理过期药品;采购主管则关注采购订单的生成、审批流程以及与供应商的对账情况,需通过系统快速下单并跟踪到货状态;销售人员需要在点单过程中能够即时查询库存,避免因缺货导致的客户流失,并支持退货操作及相应库存调整;系统管理员负责用户权限管理、系统监控与维护,要求系统具备灵活的角色分配与日志审计功能,以满足企业内部治理需求;监管部门审计人员则需要通过系统获取完整的药品进销存记录,支持批次溯源查询和合规报告生成,从而便于进行药品安全监管。上述各类用户共同要求系统界面友好、操作流程简洁、数据更新及时,并且在多终端(PC、移动设备)之间保持一致的使用体验。

功能需求方面,系统需实现完整的进销存业务流程,具体包括库存管理模块、采购管理模块、销售管理模块及报表与分析模块。库存管理模块应支持药品入库、出库、盘点及调拨操作,并能够记录批次号、生产厂家、有效期等关键信息;在库存低于预设阈值或药品即将到期时,系统需自动触发告警并推送至相关人员;采购管理模块需要提供订单创建、审批工作流、供应商信息维护以及到货确认功能,并支持与外部采购系统的接口对接;销售管理模块应实现点单、库存扣减、退货处理以及销售统计,所有操作均需记录时间戳和操作者信息;报表与分析模块则需提供库存周转率、成本核算、销量趋势等多维度报表,并支持自定义查询与导出功能;此外,系统还必须具备条码扫描与RFID读取接口,以实现药品信息的自动采集;在安全层面,系统需实现基于角色的访问控制、数据加密传输、审计日志记录以及合规报表生成,以满足监管要求。通过上述功能模块的协同工作,系统能够为药品企业提供高效、准确且合规的库存与进销存管理解决方案。

七、可行性分析

经济可行性方面,本系统采用开源技术栈,主要依托SpringBoot、Spring Cloud、MySQL、Redis等成熟框架,避免了昂贵的商业软件许可费用;在硬件投入上,仅需标准服务器与条码扫描设备即可满足业务需求,降低初期资本支出;系统模块化设计使得后期功能扩展可按需增购或自行开发,进一步降低维护成本;通过实现库存周转率提升与过期损失减少,企业可在短期内收回投入并实现利润增长,从而证明项目的经济效益。

社会可行性方面,药品库存管理直接关系到公共健康与安全,系统能够提高药品供应链的透明度与可追溯性,满足监管部门对药品安全的合规要求;在提升企业运营效率的同时,也为消费者提供更可靠的药品供应保障,增强社会信任度;此外,本研究将采用开放接口与标准化数据模型,促进不同企业之间的信息互通,推动行业整体数字化升级;通过对中小药企低成本、高可维护性的解决方案,可缓解行业数字鸿沟,实现技术普惠。

技术可行性方面,SpringBoot生态已在国内外众多企业中得到广泛验证,其微服务架构、自动配置与插件化特性能够快速满足业务模块的拆分与扩展需求;基于Kafka或RabbitMQ的消息总线可实现高并发下的异步通信,保障系统弹性;通过Saga模式与分布式事务补偿机制,可在多服务协同中保持数据一致性;Redis缓存与读写分离策略能够显著提升数据库访问性能;在安全层面,JWT鉴权、RBAC权限控制以及TLS加密传输已成为行业标准,可满足药品信息的保密与审计需求;对条码扫描与RFID读取的硬件接口已成熟,且可通过现有SDK实现快速集成。综上所述,技术实现路径成熟可靠,具备实现目标的充分可行性。

八、功能分析

系统功能模块可划分为用户管理与权限控制、库存管理、采购管理、销售管理、报表与分析以及合规与安全保障六大核心部分。用户管理与权限控制模块负责系统用户的注册、登录、角色分配以及权限校验,采用JWT鉴权机制实现无状态身份验证,并通过RBAC模型细粒度授权,以满足不同岗位的业务需求;库存管理模块涵盖药品入库、出库、盘点与调拨功能,系统能够自动识别条码或二维码并读取批次号、生产厂家及有效期信息,在库存数量低于阈值或药品即将到期时触发告警,并支持手动调整与历史记录查询;采购管理模块提供采购订单创建、审批工作流、供应商信息维护以及到货确认流程,订单状态可在系统中实时跟踪,支持与外部采购系统的接口对接,实现数据同步;销售管理模块实现点单、库存扣减、退货处理与销售统计,所有操作均记录时间戳与操作者信息,并支持快速查询历史交易记录;报表与分析模块提供库存周转率、成本核算、销量趋势等多维度报表,并支持自定义查询与导出功能,利用Spring Batch进行批量数据处理;合规与安全保障模块集成数据加密存储、传输加密、审计日志链以及合规报表生成,满足药监部门对药品进销存数据完整性与可追溯性的监管要求。通过上述模块的协同工作,系统能够实现药品库存与进销存全过程的数字化管理,并提供高效、准确且合规的数据支持。

九、数据库设计

表:users
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 用户编号 | 36 | varchar(36) | 主键(UUID)| 唯一标识用户
username | 登录名 | 50 | varchar(50) | 唯一约束| 必填字段
password_hash | 密码哈希值 | 255 | varchar(255) | -| 使用bcrypt等加密算法
email | 邮箱地址 | 100 | varchar(100) | 唯一约束| 可用于找回密码
phone | 联系电话 | 20 | varchar(20) | -| 可为空
status | 用户状态(0禁用1启用) | 1 | tinyint(1) | -| 默认1
created_at | 创建时间 | 19 | datetime | -| 自动生成

表:roles
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 角色编号 | 36 | varchar(36) | 主键(UUID)| 唯一标识角色
name | 角色名称 | 50 | varchar(50) | 唯一约束| 如管理员、采购员、销售员

表:permissions
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 权限编号 | 36 | varchar(36) | 主键(UUID)| 唯一标识权限
name | 权限名称 | 100 | varchar(100) | 唯一约束| 如“查看库存”“编辑采购”

表:user_role
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
user_id | 用户编号 | 36 | varchar(36) | 外键(users.id)| 与用户关联
role_id | 角色编号 | 36 | varchar(36) | 外键(roles.id)| 与角色关联

表:role_permission
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
role_id | 角色编号 | 36 | varchar(36) | 外键(roles.id)| 与角色关联
permission_id | 权限编号 | 36 | varchar(36) | 外键(permissions.id)| 与权限关联

表:categories
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 分类编号 | 36 | varchar(36) | 主键(UUID)|
name | 分类名称 | 100 | varchar(100) | -|
parent_id | 父级分类编号(若无则为空) | 36 | varchar(36) | 外键(categories.id)|

表:products
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 产品编号 | 36 | varchar(36) | 主键(UUID)|
name | 产品名称 | 200 | varchar(200) | -|
specs | 产品规格描述(如“500mg/片”) | 100 | varchar(100) | -|
category_id | 所属分类编号 | 36 | varchar(36) | 外键(categories.id)|

表:suppliers
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 供应商编号 | 36 | varchar(36) | 主键(UUID)|
name | 供应商名称 | 200 | varchar(200) | -|
address | 地址信息 | 255 | varchar(255) | -|
contact_phone | 联系电话 | 20 | varchar(20) | -|
email | 邮箱地址 | 100 | varchar(100) | -|

表:batches
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 批次编号(内部唯一) | 36 | varchar(36) | 主键(UUID)|
batch_number | 批号(供应商提供) | 50 | varchar(50) | 唯一约束|
product_id | 产品编号 | 36 | varchar(36) | 外键(products.id)|
supplier_id | 供应商编号 | 36 | varchar(36) | 外键(suppliers.id)|
manufacture_date | 生产日期 | 10 | date | -|
expiry_date | 有效期截止日 | 10 | date | -|
cost_price | 成本价(单价) | 10,2 | decimal(10,2) | -|
retail_price | 零售价(单价) | 10,2 | decimal(10,2) | -|
stock_quantity | 当前库存数量 | 11 | int(11) | -|

表:stock_movements
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 移动记录编号 | 36 | varchar(36) | 主键(UUID)|
movement_type | 移动类型(IN/OUT/ADJUST) | 10 | varchar(10) | -|
product_id | 产品编号 | 36 | varchar(36) | 外键(products.id)|
batch_id | 批次编号 | 36 | varchar(36) | 外键(batches.id)|
quantity | 移动数量(正数) | 11 | int(11) | -|
reason | 移动原因(如采购、销售、盘点) | 255 | varchar(255) | -|
user_id | 操作者编号 | 36 | varchar(36) | 外键(users.id)|
timestamp | 操作时间戳 | 19 | datetime | -|

表:purchase_orders
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 采购单编号 | 36 | varchar(36) | 主键(UUID)|
purchase_order_no | 系统生成的采购单号(如PO20231001) | 20 | varchar(20) | 唯一约束|
supplier_id | 供应商编号 | 36 | varchar(36) | 外键(suppliers.id)|
status | 单据状态(0待审批1已审批2已收货3已完成) | 1 | tinyint(1) | -|
total_amount | 总金额(含税) | 10,2 | decimal(10,2) | -|
created_at | 创建时间戳 | 19 | datetime | -|
approved_by | 审批人编号(若已审批) | 36 | varchar(36) | 外键(users.id)|

表:purchase_order_items
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 采购单行项目编号 | 36 | varchar(36) | 主键(UUID)|
purchase_order_id | 所属采购单编号 | 36 | varchar(36) | 外键(purchase_orders.id)|
product_id | 产品编号 | 36 | varchar(36) | 外键(products.id)|
batch_id | 批次编号(预期到货批号) | 36 | varchar(36) | 外键(batches.id)|
quantity | 订购数量 | 11 | int(11) | -|
unit_price | 单价(采购价) | 10,2 | decimal(10,2) | -|
total_price | 行项目总价(quantity*unit_price) | 10,2 | decimal(10,2) | -|

表:sales_orders
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 销售单编号 | 36 | varchar(36) | 主键(UUID)|
sales_order_no | 系统生成的销售单号(如SO20231001) | 20 | varchar(20) | 唯一约束|
customer_name | 客户名称(或客户编号) | 200 | varchar(200) | -|
status | 单据状态(0待付款1已付款2已发货3已完成) | 1 | tinyint(1) | -|
total_amount | 总金额(含税) | 10,2 | decimal(10,2) | -|
created_at | 创建时间戳 | 19 | datetime | -|
user_id | 操作者编号(创建人) | 36 | varchar(36) | 外键(users.id)|

表:sales_order_items
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 销售单行项目编号 | 36 | varchar(36) | 主键(UUID)|
sales_order_id | 所属销售单编号 | 36 | varchar(36) | 外键(sales_orders.id)|
product_id | 产品编号 | 36 | varchar(36) | 外键(products.id)|
batch_id | 批次编号(实际发货批号) | 36 | varchar(36) | 外键(batches.id)|
quantity | 销售数量 | 11 | int(11) | -|
unit_price | 单价(零售价) | 10,2 | decimal(10,2) | -|
total_price | 行项目总价(quantity*unit_price) | 10,2 | decimal(10,2) | -|

表:audit_logs
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
id | 日志编号 | 36 | varchar(36) | 主键(UUID)|
user_id | 操作者编号 | 36 | varchar(36) | 外键(users.id)|
event_type | 事件类型(如LOGIN、CREATE_ORDER、UPDATE_STOCK) | 50 | varchar(50) | -|
description | 事件描述信息 | 255 | varchar(255) | -|
timestamp | 事件时间戳 | 19 | datetime | -|

以上表结构遵循第一范式至第三范式,避免重复数据与冗余;主键采用UUID保证全局唯一;外键约束确保参照完整性;字段类型与大小根据业务需求合理设定。

十、建表语句

CREATE DATABASE IF NOT EXISTS pharma_inventory CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE pharma_inventory;

-- 用户表
CREATE TABLE users (
id VARCHAR(36) NOT NULL,
username VARCHAR(50) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
status TINYINT(1) DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uq_users_username (username),
UNIQUE KEY uq_users_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 角色表
CREATE TABLE roles (
id VARCHAR(36) NOT NULL,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_roles_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 权限表
CREATE TABLE permissions (
id VARCHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_permissions_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 用户角色关联表
CREATE TABLE user_role (
user_id VARCHAR(36) NOT NULL,
role_id VARCHAR(36) NOT NULL,
PRIMARY KEY (user_id, role_id),
CONSTRAINT fk_user_role_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_user_role_role FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 角色权限关联表
CREATE TABLE role_permission (
role_id VARCHAR(36) NOT NULL,
permission_id VARCHAR(36) NOT NULL,
PRIMARY KEY (role_id, permission_id),
CONSTRAINT fk_role_permission_role FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_role_permission_permission FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 分类表
CREATE TABLE categories (
id VARCHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
parent_id VARCHAR(36),
PRIMARY KEY (id),
CONSTRAINT fk_categories_parent FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 产品表
CREATE TABLE products (
id VARCHAR(36) NOT NULL,
name VARCHAR(200) NOT NULL,
specs VARCHAR(100),
category_id VARCHAR(36),
PRIMARY KEY (id),
CONSTRAINT fk_products_category FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 供应商表
CREATE TABLE suppliers (
id VARCHAR(36) NOT NULL,
name VARCHAR(200) NOT NULL,
address VARCHAR(255),
contact_phone VARCHAR(20),
email VARCHAR(100),
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 批次表
CREATE TABLE batches (
id VARCHAR(36) NOT NULL,
batch_number VARCHAR(50) NOT NULL,
product_id VARCHAR(36) NOT NULL,
supplier_id VARCHAR(36) NOT NULL,
manufacture_date DATE,
expiry_date DATE,
cost_price DECIMAL(10,2),
retail_price DECIMAL(10,2),
stock_quantity INT DEFAULT 0,
PRIMARY KEY (id),
UNIQUE KEY uq_batches_batch_number (batch_number),
CONSTRAINT fk_batches_product FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_batches_supplier FOREIGN KEY (supplier_id) REFERENCES suppliers(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 库存变动表
CREATE TABLE stock_movements (
id VARCHAR(36) NOT NULL,
movement_type VARCHAR(10) NOT NULL,
product_id VARCHAR(36) NOT NULL,
batch_id VARCHAR(36) NOT NULL,
quantity INT NOT NULL,
reason VARCHAR(255),
user_id VARCHAR(36),
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
CONSTRAINT fk_stock_movements_product FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_stock_movements_batch FOREIGN KEY (batch_id) REFERENCES batches(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_stock_movements_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 采购单表
CREATE TABLE purchase_orders (
id VARCHAR(36) NOT NULL,
purchase_order_no VARCHAR(20) NOT NULL,
supplier_id VARCHAR(36) NOT NULL,
status TINYINT(1) DEFAULT 0,
total_amount DECIMAL(10,2),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
approved_by VARCHAR(36),
PRIMARY KEY (id),
UNIQUE KEY uq_purchase_orders_no (purchase_order_no),
CONSTRAINT fk_purchase_orders_supplier FOREIGN KEY (supplier_id) REFERENCES suppliers(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_purchase_orders_user FOREIGN KEY (approved_by) REFERENCES users(id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 采购单行项目表
CREATE TABLE purchase_order_items (
id VARCHAR(36) NOT NULL,
purchase_order_id VARCHAR(36) NOT NULL,
product_id VARCHAR(36) NOT NULL,
batch_id VARCHAR(36),
quantity INT NOT NULL,
unit_price DECIMAL(10,2),
total_price DECIMAL(10,2),
PRIMARY KEY (id),
CONSTRAINT fk_purchase_order_items_order FOREIGN KEY (purchase_order_id) REFERENCES purchase_orders(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_purchase_order_items_product FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_purchase_order_items_batch FOREIGN KEY (batch_id) REFERENCES batches(id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 销售单表
CREATE TABLE sales_orders (
id VARCHAR(36) NOT NULL,
sales_order_no VARCHAR(20) NOT NULL,
customer_name VARCHAR(200),
status TINYINT(1) DEFAULT 0,
total_amount DECIMAL(10,2),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
user_id VARCHAR(36) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_sales_orders_no (sales_order_no),
CONSTRAINT fk_sales_orders_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 销售单行项目表
CREATE TABLE sales_order_items (
id VARCHAR(36) NOT NULL,
sales_order_id VARCHAR(36) NOT NULL,
product_id VARCHAR(36) NOT NULL,
batch_id VARCHAR(36),
quantity INT NOT NULL,
unit_price DECIMAL(10,2),
total_price DECIMAL(10,2),
PRIMARY KEY (id),
CONSTRAINT fk_sales_order_items_order FOREIGN KEY (sales_order_id) REFERENCES sales_orders(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_sales_order_items_product FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_sales_order_items_batch FOREIGN KEY (batch_id) REFERENCES batches(id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 审计日志表
CREATE TABLE audit_logs (
id VARCHAR(36) NOT NULL,
user_id VARCHAR(36),
event_type VARCHAR(50),
description VARCHAR(255),
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
CONSTRAINT fk_audit_logs_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 索引优化
CREATE INDEX idx_stock_movements_product ON stock_movements(product_id);
CREATE INDEX idx_stock_movements_batch ON stock_movements(batch_id);
CREATE INDEX idx_purchase_order_items_order ON purchase_order_items(purchase_order_id);
CREATE INDEX idx_sales_order_items_order ON sales_order_items(sales_order_id);
CREATE INDEX idx_batches_product ON batches(product_id);
CREATE INDEX idx_batches_supplier ON batches(supplier_id);

文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看下方👇🏻获取联系方式👇🏻

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询