WinForm药店系统Stock_items主键item_id如何实现同商品多批次日期存储
药店库存效期区分问题解决方案
核心问题根因
现有表设计将
Stock_items的主键设为item_id,同商品所有入库批次合并为单条记录累加库存,天然不支持多批次、多效期的库存管理,完全不符合药店药品监管要求(药品需按效期先进先出、近效期预警)。
落地方案
1. 数据库表结构改造(核心改动)
- 移除
Stock_items表原item_id主键约束,新增自增字段stock_batch_id作为新主键 - 给
Stock_items表新增以下必填字段:batch_number:入库批次号,同批次同效期药品共用同一个批次号expire_date:有效期,精确到日produce_date:可选字段,存储药品生产日期dealer_id:可选字段,关联Dealers表存储本次入库的经销商信息,方便溯源
- 保留原
item_id作为外键关联Item_master表,保留原入库日期、库存数量字段
2. 入库逻辑改造
- 新入库商品时不再直接更新原有同
item_id的库存记录,每次入库新增一条独立的Stock_items记录,填写对应批次号、效期、本次入库数量即可 - 若确认入库商品是完全同
item_id、同批次号、同效期的补录库存,可选择累加对应批次的库存数量,无需新增记录
3. 业务逻辑适配
- 总库存统计:计算同一
item_id下所有未过期批次的库存数量总和即可,完全兼容原有业务的总库存展示需求 - 出库逻辑:强制遵循先进先出/近效期先出规则,优先扣减有效期最早的批次库存,某批次库存扣减为0后可标记为已售罄归档
- 效期预警:直接遍历所有
Stock_items记录,筛选出expire_date距当前日期小于预警阈值(通常设置为提前3个月)的批次,即可生成符合药监要求的近效期药品预警清单
4. 历史数据兼容处理
原有合并库存的历史记录,可补填默认批次号(比如HIS-xxx格式)和预估效期,若无法确认效期可单独标记为历史批次,优先安排出库消耗即可。
内容的提问来源于stack exchange,提问作者Ron8320
相关产品推荐
相关产品推荐

