寄售库存的数据库模式

时间:2017-06-08 12:18:03

标签: database database-design relational-database

我正在为医院开发寄售库存,

基础设施是:

Multiple Suppliers
Multiple Warehouses
Multiple Hospitals

我一直在决定是否为每个stock tableshospitals分隔warehouses或将它们全部存储在one stock table中。

我目前的计划是:

他们都只会在一个item table上阅读一般项目信息,然后股票,库存变动,托运订单,员工,患者将在每个医院/仓库中有单独的表格。

示例:

分隔表

tbl_items //centralized item information
tbl_suppliers //centralized supplier information
tbl_warehouse1id_stocks
tbl_warehouse1id_stockmovements
tbl_warehouse2id_stocks
tbl_warehouse2id_stockmovements
tbl_hospital1id_stocks
tbl_hospital1id_stockmovements
tbl_hospital1id_employee
tbl_hospital1id_patients
tbl_hospital2id_stocks
tbl_hospital2id_stockmovements
tbl_hospital2id_employee
tbl_hospital2id_patients

合并表格

tbl_items //centralized item information
tbl_suppliers //centralized supplier information
tbl_warehouse_stocks //where warehouse_ids are primary keys
tbl_warehouse_stockmovements //where warehouse_ids are primary keys
tbl_hospital_stocks //where hospital_ids are primary keys
tbl_hospital_stockmovements //where hospital_ids are primary keys
tbl_hospital_employee //where hospital_ids are primary keys
tbl_hospital_patients //where hospital_ids are primary keys

哪个更好?用于维护,速度优化等?我目前的意见是分离的方法更好,因为为什么(例如)医院1应该搜索他们的某些物品库存到所有医院的库存中?这会影响速度吗?如果hospital1试图查询他们的整个股票记录,它将影响其他医院的查询时间,因为hospital1目前正在搜索他们的记录。当然,索引应该有所帮助,但仍然存在。

编辑:

服务器驻留在一个位置及其基于Web的系统上。

1 个答案:

答案 0 :(得分:0)

我强烈建议采用您已经制定的MERGED TABLES方法。

单独表格的缺点:

  • 每次建立新仓库/医院或将其添加到跟踪系统时,您都必须在架构中添加新表
  • 编写一个查询来计算所有医院或仓库中单个项目的库存现在因为更复杂的查询(联合/加入每个表)。将此与可以添加到系统的新仓库(上一点)相结合,您现在必须单独更新所有这些查询
  • 您的网络后端层如何知道要查询的表?这听起来像是你要沿着动态查询生成的道路前进,并且会为你的代码库增加更多的复杂性。

除非你有很大的限制,你没有布局(非常大的数据库有数十亿行或者你可以扩展的硬件不好),索引的设计正是为了帮助解决这个问题。