5

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

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

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

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

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

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

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

  • 还要别的吗?

更新:

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

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

所以,我肯定会从拥有一个单独的库存表中受益匪浅,因为主要产品表没有太大变化,但库存是。

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

4

1 回答 1

4

•还要别的吗?

TL/DR:是的,缓存。

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

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

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

于 2014-12-29T21:03:22.513 回答