关于设置库存数据库的问题

时间:2011-07-07 16:19:38

标签: sql database tsql database-design

好的,所以我正在创建一个sql数据库来跟踪库存。我有大约170种不同类型的物品。某些类型中包含多个项目。例如:我有一个cisco开关(Item of Item),我有20个这样的开关。

我想弄清楚如何将这些输入到数据库中。每个项目都有一个序列号,我是否需要将每个交换机单独输入数据库?或者有没有办法我可以输入一次开关类型并列出该行的所有序列号?我想使用Count函数来计算每个项目的行数。

我只想弄清楚设置它的最佳方法。不是要求解决方案,只是建议。如果需要更多信息,请告诉我。

以下是我的表格及其列:

表:项目

列:id,ItemDescriptorID,LocationID,AccessoriesID,SerialNumber,AssignedTo

表:ItemDescriptor

列:id,Brand,DeviceName,Model,Image,Type,Notes

表:配件

列:id,ItemDescriptorID,OnHandCount,StorageRoomCount

表:位置

列:id,位置

5 个答案:

答案 0 :(得分:4)

警告:严肃的数据库设计是一件非常重要的艺术。您可能需要花费很长时间才能确定数据的正确模型。去做。这是值得的。现在每一个错误或遗漏都会花费你多少时间。


存储尽可能多的信息,按关系组织,以便没有冗余。因此,所有单个项目都有一个表格,每个项目都有一个部分类型;一个零件类型表,每种类型都有供应商和类别(开关,电缆,监视器......);一个供应商的表;一个表类别等。

如果您发现必须输入两次特定的信息单元,则关系模型是错误的。

最后,让数据库向您显示您应该关注的任何信息,例如计数,统计数据,平均值等。

答案 1 :(得分:1)

对于库存,我建议您至少有两个表项。一个是通用项目(例如思科交换机模型3750),另一个是链接到该表并具有特定项目(资产#,序列号等)。这将真正开始从这里分支出来,具体取决于如何你想要得到的复杂。例如,我可以看到以下是潜在的字段或表格,具体取决于您的环境和所需的复杂性:

  • 位置(一个位置有多个项目)
  • 购买信息(你是批量购买)

答案 2 :(得分:1)

我会创建一个列表,列出具有唯一ID的产品。然后是一个表,其中包含序列号和产品描述的ID以及该项目可能唯一的其他内容。您仍然可以通过专门选择具有cisco开关ID的项目进行计数。

{}产品 - ID - 名称(思科交换机) - 类别 - 等等

{库存} - id(用于唯一性) - product_id - 连续 - 添加日期 - 等等

尽量消除信息重复的任何地方。希望这会有所帮助:)

答案 3 :(得分:0)

您必须为项创建常规表,并为Category创建表。您必须创建一个单独的Stock表,其中包含itemID和categoryID,以及Quantity列。 与项目相关的所有信息都将在项目表中,类别表格将包含您在清单中的所有类型的项目。项目和类别将是您设置表格。您必须输入一次记录,然后您可以在库存系统中的不同位置重新使用它。

答案 4 :(得分:0)

这是使用临时表的解决方案的超时。它可能对你有所帮助。

DECLARE @itemtypes TABLE (id INT IDENTITY (1,1), name VARCHAR(50))
DECLARE @itemstock TABLE (id INT IDENTITY (1,1), itemtype_id INT, serialno VARCHAR(20))

INSERT INTo @itemtypes (name) VALUES ('cisco switch')

INSERT INTo @itemstock (itemtype_id, serialno)
SELECT id, 'serial no 1' FROM @itemtypes WHERE name = 'cisco switch'
UNION all 
SELECT id, 'serial no 2' FROM @itemtypes WHERE name = 'cisco switch'
UNION all 
SELECT id, 'serial no 3' FROM @itemtypes WHERE name = 'cisco switch'

SELECT it.id, it.name, COUNT(ist.id) count
FROM @itemtypes it left outer join @itemstock ist ON it.id = ist.itemtype_id 
GROUP BY it.id, it.name