将库存数据与产品数据保存在单独的表中

mus*_*sme 5 database database-design inventory inventory-management

TL;DR:将“库存”数据表与产品表分开的原因是什么?

我不久前构建了一个应用程序来存储零售产品目录。它在大多数平面表格中包括标准属性,例如尺寸、颜色、图像链接、描述等。它只是 Magento 产品的索引数据,因为该应用程序在单独的服务器上运行。它还有一列数量,但没有任何用途;我只是把它放在那里,想着“以防万一”。

现在,我需要在此应用程序上实现某种库存管理。我一直在研究应该如何更新/设置数据库结构,似乎系统更喜欢在主产品表中拥有单独的“库存”表。对于 Magento 来说也是如此。这是为什么?(请注意,我的应用程序不需要能够为给定产品设置单独的库存水平。)

关于这一点,我想到了几件事..(基本上,除了产品对象之外,库存将是它自己的对象)

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

  • 能够跟踪库存变化(例如谁/什么负责更改库存等)

  • 能够将不同来源的库存分开以进行报告或统计。

  • 还要别的吗?

更新:

Hazzit 回答了我的问题,他指出了 MySQL 表缓存的一个潜在非常有用的事实,如果您对某个特定表有大量查询。在这里阅读有关此处的内容,但有人指出..

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

因此,拥有一个单独的库存表肯定会让我受益匪浅,因为主要产品表没有发生很大变化,但库存却发生了很大变化。

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

Haz*_*zit 6

\xe2\x80\xa2还有其他吗?

\n\n

TL/DR:是的,缓存。

\n\n

您已经从规范化的角度列出了可能需要另一个表的大多数原因,可能还有一些更类似的原因需要拥有一个单独的表(甚至两个)。不过,还有其他一些事情需要考虑:库存数量比大多数其他产品信息更频繁地发生变化。根据数据库系统的不同,仅更新一列可能会或可能不会带来重大的性能损失。例如:MySQL 会在基础表发生任何更新时使所有查询缓存失效。因此,如果您正在更新,该表上的任何查询都会使其缓存失效 - 即使是一个简单的查询,甚至不使用quantity_in_stockselect name from productsquantity_in_stock列的简单查询。

\n\n

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

\n\n

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

\n