库存系统的灵活数据库设计

Flexible database design for an inventory system

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

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

Computers, Printers, Cartridges, Projectors, Mouses, Keyboards etc.

而且每个项目都有一些共同的数据,不管它是什么类型:

TEMSID (like a barcode), SerialNumber, PurchaseDate, RegisterDate and other, see item entity for more.

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

这就是我要处理它的方式,但是我不确定:

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

忽略项目 table

中的那些 FK ID

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

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

问问自己:如果学校得到一个你没有 table 的物品,会发生什么(f.e。比如 PrinterPrinterType ) 在你的数据库中?如果这种情况经常发生?然后你每次都必须向数据库添加新的tables。

另一方面,您拥有类型特定的属性,但它们可能很常见,例如 modelcolor

如果我是你,我会制作一个动态系统,这意味着 administrator/user 可以添加任何项目(设备)类型并可以向其添加任何属性。

我会这样设计数据库:

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

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

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

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

转换此值

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