【问题标题】:Flexible database design for an inventory system库存系统的灵活数据库设计
【发布时间】:2020-12-19 16:33:38
【问题描述】:

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

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

计算机、打印机、墨盒、投影仪、鼠标、键盘等

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

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

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

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

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

忽略项目表中的那些 FK ID


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

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

【问题讨论】:

    标签: sql sql-server database database-design


    【解决方案1】:

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

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

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

    我会这样设计数据库:

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

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

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

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

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

    【讨论】:

    • 但是还有一些我没有包含在屏幕截图中的内容。系统也存储有关计算机的信息,计算机是 db 中其他项目的集合(我的意思是计算机 = CPU + PSU + 主板 + GPU + StorageDevice + ...)。使用哪种方法?要在设备表中添加新列 - parentID(其中 parentID 将是 CPU、PSU 记录的计算机 ID)或保持此状态并添加另一个表 - ComponentParts 有 2 列:DeviceID、PartID?
    • 虽然它可以与 parentID 一起使用,但在这种情况下,我们将在设备表中有记录,其中 parentID 将为空,这不太完美。另一方面,组件对我来说是一个新实体,因此我会另辟蹊径,将数据保存在单独的表中。有趣的事实:Baba 在匈牙利语中的意思是小婴儿。
    • 我来这里是为了感谢您提供的这个惊人的解决方案!我按照你说的方式设计了我的系统,非常完美!
    • 我很高兴听到这个消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2021-09-24
    • 2012-02-12
    • 2017-03-24
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多