首页 > 解决方案 > 库存系统的灵活数据库设计

问题描述

我必须为我的学校建立一个库存管理系统,这是我面临的问题:

我必须在系统中存储多种类型的设备:

电脑、打印机、墨盒、投影仪、鼠标、键盘等

每个项目都有一些共同的数据,无论它是什么类型:

TEMSID(如条形码)、SerialNumber、PurchaseDate、RegisterDate 等,更多信息请参见项目实体。

此外,每种项目类型都有必须存储的特定字段。

这就是我将如何处理它,但是我不确定:

  1. [item] 表存放常用数据
  2. [item] 表与存储有关特定项目的更多详细信息的其他表具有一对一的关系。
  3. 重复数据(制造商、型号、分辨率等)存储在其他表 [itemType] 中以减少冗余。

这是架构 忽略项目表中的那些 FK ID


我觉得这是一个糟糕的设计。

如果有其他更有效的解决方案,我准备从头开始设计。先感谢您!

标签: sqlsql-serverdatabasedatabase-design

解决方案


问问自己:如果学校得到一个项目,而你的数据库中没有任何表(fe like Printerand PrinterType),会发生什么?如果这种情况经常发生?然后你必须每次都向数据库中添加新表。

另一方面,您具有特定于类型的属性,但它们可以是常见的,例如modelcolor

如果我是你,我会创建一个动态系统,这意味着管理员/用户可以添加任何项目(设备)类型并可以向其添加任何属性。

我会这样设计数据库:

在此处输入图像描述

我们有打印机、投影仪等设备类型。然后我们有devices包含基本数据的表格并连接到devicetypes表格。然后我们有一个properties表,其中保存了所有设备类型的其他属性(一个属性只有一次,没有冗余)。最后,我们有一个propvalues表,我们在其中存储每个设备的不同属性值。

F.e. 在上面的示例中,设备id: 1具有两个属性(型号和颜色),其值为hptrue

通过这种设计,用户/管理员可以管理任意数量的属性。

一件特别的事情:该value字段应该是一个string字段,因为它可以保存数字、字符串、日期等值。在视图中,您必须根据datatype.

如果你还必须管理兼容性数据,当然你可以做得更通用。但也许这应该是一个家庭作业:-)


推荐阅读