2010-02-19 57 views
2

这不是与特定语言相关的问题,而是与处理库存架构的正确方法有关。数据库中的库存架构

考虑用于存储软件的结构如下:

platforms (platformID*, platformName) 
titles (titleID*, titleName) 

而下面的是独特的产品

products (platformID*, titleID*, releaseDate, notes) 

一个木匠表,下面是一个表,我想保持跟踪我库存

inventory (platformID*, titleID*, quantityAvailable) 

在我看到的例子中,其他人已经创建其中,软件的每一个独特的副本存储在一个单独的行作为这样一个表:

software(softwareID*, softwareTitle) 
inventory(inventoryID*, softwareID*) 

我想知道哪种方法最好?我应该创建一个inventoryID,从而为每一个独特的软件拷贝中的一行:

inventory(inventoryID*, platformID*(fk), titleID*(fk)) 

或使用存储量而不是表,因为这样的:

inventory(platformID*(fk), titleID*(fk), quantityAvailable) 
+0

我省略了我的问题中的一个重要细节;也就是说,我打算跟踪已借出的库存。我不确定这将如何影响我的计划。 – Mohamad 2010-02-19 13:51:16

回答

1

我也会从quantityAvailable开始,而不是所有项目的行。 但是我仍然会选择inventoryId,因为可能会发生案例,您必须使用相同的平台/标题组合对条目进行剖析 - 使用inventoryId,您将来可以进一步增强其功能。

我还建议添加更多列:versionNo ---软件产品的版本号。有时你可能会有相同产品的不同版本。当你有这个时,把信息放入标题并不是一个好主意(例如,你想要搜索所有“Microsoft Office”产品,而不管版本是什么......)。

+0

Juergan,谢谢你的回应。我在上面添加了一条评论,我忽略了一个重要的事实:我想跟踪库存项目的位置(例如,如果是游戏或电影,例如,我想追踪它目前是哪个客户)和我我不确定这会如何影响我的计划。 – Mohamad 2010-02-19 13:53:01

+1

嗨梅尔,我听起来这样的信息属于库存实体。这是其中一个原因,inventoryId会有帮助(当然是主键) - 因为您可以获得具有不同属性的多个库存条目。当然,您仍然可以选择每件商品的一行 - 因为当您的商品库存经常被拆分时,单一条目更容易处理为汇总条目,您每次需要将一件商品分拆给客户。 – Juergen 2010-02-19 14:07:52

+1

另一个想法:您可能希望为自己的广告资源可以投放的地点(或客户)拥有自己的表格(不仅仅是文本字段)。 – Juergen 2010-02-19 14:09:45

1

我应该创建一个inventoryID和 从而为每一个独特的软件 复制一行?

没有理由这样做,除非您想在每个独特的软件副本上存储一些信息,例如每个副本的购买日期。这在软件清单中很少具有政治意义。

或者使用存储数量为 的表格代替?

您也可以考虑在你的产品表中新增quantityAvailable列,除非你认为最终你会想为每个标题许多库存,为了能够分配的股票数量是下特别优惠,即将到期等。

+0

谢谢,丹尼尔,我在问题的底部添加了一个额外的评论,我完全改变了问题的肤色:基于客户的库存跟踪库存。 – Mohamad 2010-02-19 13:53:47

2

对于每件库存都有一个独特的行的优点是,如果您想跟踪库存停滞,库存处于预订状态,已经售出但仍可退货的库存等。

我没有看到任何实际的缺点除了这可能是更多的工作,如果这些东西不是真的需要的话,这些工作可能无法得到回报。

+0

谢谢,佩斯。您可能会注意到,当我问我的问题时,我无意中忽略了一个重要细节:我打算根据借用客户来跟踪库存。例如,我想跟踪库存项目在哪个客户的哪个位置。 – Mohamad 2010-02-19 13:55:09