将库存数据保存在与产品数据不同的表中

时间:2014-12-28 02:51:17

标签: database database-design inventory inventory-management

TL; DR:保留" stock"的原因是什么?数据表与产品表分开?

我已经建立了一个应用程序,用于存储零售产品目录。它包括大多数平面表中的标准属性,如大小,颜色,图像链接,描述等。它只是Magento产品的索引数据,因为该应用程序在单独的服务器上运行。它还有一个数量的列,它没有任何用途;我只是把它放在那里思考"以防万一。"

现在,我需要在此应用程序上实施某种库存管理。我一直在研究如何更新/设置数据库结构,似乎系统更喜欢单独的" stock"主要产品表中的表格。 Magento也是如此。这是为什么? (请注意,我的应用程序不需要为给定产品提供单独的库存水平。)

我发现了一些关于此问题的事情......(基本上,除了产品对象之外,库存将是它自己的对象)

  • 给定产品的多个库存池。

  • 能够跟踪库存变化(例如负责更改库存的人/负责人等)

  • 能够将来自不同来源的股票与报告或统计数据分开。

  • 还有别的吗?

更新

Hazzit回答了我的问题,指出了MySQL表缓存可能非常有用的事实,如果您对特定表有很多查询。请阅读此处HERE,但有人指出......

  

如果表发生更改,则使用该表的所有缓存查询都将成为   无效并从缓存中删除。

因此,由于主要产品表并未经过多次修改,因此我肯定会从拥有单独的库存表中受益匪浅,但库存却是。

数据库模型参考: http://www.databaseanswers.org/data_models/

1 个答案:

答案 0 :(得分:2)

•还有别的吗?

TL / DR:是的,缓存。

您已经列出了从正常化角度来看可能需要另一个表的大部分原因,可能还有一些类似的原因可能会有一个单独的表(甚至两个)。但是还有一些事情要考虑:库存数量比大多数其他产品信息更频繁地改变。根据数据库系统的更新,只有一列可能会或可能不会带来重大的性能损失。例如:MySQL在基础表上的任何更新时使所有查询缓存无效。因此,如果您要更新quantity_in_stock,那么该表上的任何查询都会使其缓存失效 - 即使是一个甚至不使用select name from products列的简单quantity_in_stock。< / p>

现实生活中的例子:Joomla在其文章表中有一个hits列。每次查看文章时,它都会更新该列,导致...您猜对了!清除的查询缓存。含义:每当任何人访问Joomla网站上的任何文章时,该糟糕的数据库服务器将必须清除其通常是整个数据库中最大的表的查询缓存。您可以在此时停用查询缓存。

回到你的问题:除非你期望你的系统负载过重(例如面向公众的网站),否则你应该只为自己提出一个问题:任何产品的库存数量是否都超过一个?库存中的任何数量是否与多种产品相关?如果您的回答是&#34;否&#34;在这两种情况下,只需将列放入主产品表中即可。