【问题标题】:Inventory Architecture in Database数据库中的库存架构
【发布时间】:2011-01-18 18:48:01
【问题描述】:

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

考虑以下存储软件的结构:

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)

【问题讨论】:

  • 我从我的问题中遗漏了一个重要的细节;也就是说,我计划跟踪借出的库存。我不确定这会如何影响我的计划。

标签: mysql database-design architecture inventory


【解决方案1】:

为每件库存设置唯一行的好处是,以后如果您想跟踪诸如中途停留的库存、预购的库存、已售出但仍可退回的库存等内容。

我认为这种方法没有任何真正的缺点,只是它可能需要更多的工作,如果这些东西不是真正需要的话,可能不会得到回报。

【讨论】:

  • 谢谢,佩斯。您可能会注意到,当我提出问题时,我无意中遗漏了一个重要细节:我计划根据借来的客户跟踪库存。例如,我想跟踪库存项目在哪里/与哪个客户在一起。
【解决方案2】:

我也会从数量可用而不是所有项目的行开始。 但是我仍然会选择inventoryId,因为可能会发生这样的情况,您必须使用相同的平台/标题组合来剖析条目——使用inventoryId,您将来会更容易增强。 p>

我还建议再添加一列:versionNo --- 软件产品的版本号。有时您可能拥有同一产品的不同版本。当你有这个时,将信息放到标题中不是一个好主意(例如,你想搜索所有“Microsoft Office”产品而不管版本......)。

【讨论】:

  • 巨尔干,谢谢您的回复。我在上面添加了一条评论,我省略了一个重要事实:我想跟踪库存项目的位置(例如,如果它是游戏或电影,我想跟踪它目前是哪个客户)并且我我不确定这会如何影响我的计划。
  • 嗨,Mel,我听说此类信息属于库存实体。这是原因之一,inventoryId 会很有帮助(当然作为主键)——因为您可以获得多个具有不同属性的库存条目。当然,您仍然可以为每个项目选择一行 - 因为当您的库存经常拆分时,单个条目作为汇总条目更容易处理,每次将一件物品借给客户时您都必须拆分这些条目......
  • 另一个想法:您可能希望有一个自己的表格,用于您的库存可以去往的地方(或客户)(不仅仅是一个文本字段)。
  • 感谢于尔根。它变得如此复杂,我将遵循您的建议并从数量可用开始。我会在前进的过程中进行补充并进行一些测试。感谢您的建议。
【解决方案3】:

我应该创建一个inventoryID和 因此每个独特的软件都有一行 复制?

没有理由这样做,除非您想在每个唯一的软件副本上存储一些信息,例如每个副本的购买日期。这在软件清单中很少实用。

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

您还可以考虑在您的产品表中添加一个quantityAvailable 列,除非您认为最终您希望为每个标题拥有许多库存,以便能够分配特定数量的库存报价,即将到期等。

【讨论】:

  • 谢谢,Daniel,我在问题的底部添加了一条额外的评论,即我完全改变了问题的复杂性:Tracking inventory based on a customer who has out.
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2018-07-15
相关资源
最近更新 更多