sql - 库存系统的灵活数据库设计
问题描述
我必须为我的学校建立一个库存管理系统,这是我面临的问题:
我必须在系统中存储多种类型的设备:
电脑、打印机、墨盒、投影仪、鼠标、键盘等
每个项目都有一些共同的数据,无论它是什么类型:
TEMSID(如条形码)、SerialNumber、PurchaseDate、RegisterDate 等,更多信息请参见项目实体。
此外,每种项目类型都有必须存储的特定字段。
这就是我将如何处理它,但是我不确定:
- [item] 表存放常用数据
- [item] 表与存储有关特定项目的更多详细信息的其他表具有一对一的关系。
- 重复数据(制造商、型号、分辨率等)存储在其他表 [itemType] 中以减少冗余。
我觉得这是一个糟糕的设计。
如果有其他更有效的解决方案,我准备从头开始设计。先感谢您!
解决方案
问问自己:如果学校得到一个项目,而你的数据库中没有任何表(fe like Printer
and PrinterType
),会发生什么?如果这种情况经常发生?然后你必须每次都向数据库中添加新表。
另一方面,您具有特定于类型的属性,但它们可以是常见的,例如model
或color
。
如果我是你,我会创建一个动态系统,这意味着管理员/用户可以添加任何项目(设备)类型并可以向其添加任何属性。
我会这样设计数据库:
我们有打印机、投影仪等设备类型。然后我们有devices
包含基本数据的表格并连接到devicetypes
表格。然后我们有一个properties
表,其中保存了所有设备类型的其他属性(一个属性只有一次,没有冗余)。最后,我们有一个propvalues
表,我们在其中存储每个设备的不同属性值。
F.e. 在上面的示例中,设备id: 1
具有两个属性(型号和颜色),其值为hp
和true
。
通过这种设计,用户/管理员可以管理任意数量的属性。
一件特别的事情:该value
字段应该是一个string
字段,因为它可以保存数字、字符串、日期等值。在视图中,您必须根据datatype
.
如果你还必须管理兼容性数据,当然你可以做得更通用。但也许这应该是一个家庭作业:-)
推荐阅读
- python - AttributeError:“响应”对象没有属性“标签”drf-yasg
- php - 将数组列与该数组列的转换相加
- windows - 在 Windows 下构建 chromium:ninja -libpath 无法识别空间(即使在引用路径中!)
- php - 包含没有 .phar 扩展名的 PHP PHAR
- vaadin - Vaadin 8:如何在网格中显示全尺寸图片?
- c# - 在 Asp.net / C# 中发送带有附件的电子邮件 - Gmail 的问题
- c# - 在 C# 8 中,我可以在方法内创建本地函数/方法吗?
- axapta - 如何在 D365FO 中的树控件上显示图标
- reactjs - 在没有 ASP.NET Core 的 Visual Studio 中反应
- c++ - C++ 构造函数体内的本地指针导致内存泄漏