将库存数据与产品数据保存在单独的表中
Posted
技术标签:
【中文标题】将库存数据与产品数据保存在单独的表中【英文标题】:Keeping inventory data in separate table from product data 【发布时间】:2015-02-24 17:20:01 【问题描述】:TL;DR:将“库存”数据表与产品表分开的原因是什么?
不久前,我构建了一个存储零售产品目录的应用程序。它包括标准属性,例如大小、颜色、图像链接、描述等,大多数是平面表。它只是 Magento 产品的索引数据,因为应用程序运行在单独的服务器上。它还有一个 quantity 列,它没有任何用途;我只是把它放在那里“以防万一”。
现在,我需要在这个应用程序上实现某种库存管理。我一直在研究如何更新/设置数据库结构,似乎系统更喜欢从主要产品表中拥有一个单独的“库存”表。 Magento 也是如此。这是为什么? (请注意,我的应用程序不需要为给定产品提供单独的库存水平。)
对此我想到了几件事..(基本上,除了产品对象之外,库存将是它自己的对象)
给定产品的多个库存池。
能够跟踪库存变化(例如谁/什么负责改变库存等)
能够分离来自不同来源的股票以进行报告或统计。
还有别的吗?
更新:
回答了我的问题的 Hazzit 指出了 mysql 表缓存的一个潜在非常有用的事实,如果您对特定表有很多查询。在这里阅读HERE,但有人指出..
如果表发生变化,所有使用该表的缓存查询都会变为 无效并从缓存中删除。
所以,我肯定会从拥有一个单独的库存表中受益匪浅,因为主产品表没有太大变化,但库存是。
数据库模型参考: http://www.databaseanswers.org/data_models/
【问题讨论】:
感觉是放假的时候发错了,哈哈。 这里任何时候都没有那么多数据库专家。 :-) 将库存数据表与产品数据表分开的原因。 1) 库存水平保留在多个地点。可能是仓库或销售网点中的垃圾箱。 2) 部分产品可能没有库存。它们可能可用于特殊订单,可能不再可用,或者可能在未来某个日期可用。 3) 库存可能是产品的更具体版本(尺寸、颜色等)。我希望这会有所帮助。 【参考方案1】:•还有其他事情吗?
TL/DR:是的,缓存。
您已经列出了从规范化的角度来看可能需要另一个表的大多数原因,可能还有更多类似的原因需要一个单独的表(甚至两个)。不过,还有其他一些事情需要考虑:库存数量的变化比大多数其他产品信息要频繁得多。根据数据库系统,仅更新一列可能会或可能不会带来重大的性能损失。例如:MySQL 在基础表上 any 更新时使 all 查询缓存无效。因此,如果您正在更新 quantity_in_stock
,则对该表的任何查询都会使其缓存失效 - 即使是一个简单的 select name from products
,它甚至不使用 quantity_in_stock
列。
现实生活中的例子:Joomla 在其文章表中有一个hits
列。每次查看文章时,它都会更新该列,从而导致……您猜对了!清除的查询缓存。含义:每当 anybody 访问 Joomla 网站上的 any 文章时,该糟糕的数据库服务器将不得不清除其查询缓存,该缓存通常是整个数据库中最大的表。您很可能在此时停用查询缓存。
回到您的问题:除非您预计您的系统会承受重负载(例如面向公众的网站),否则您自己应该只问一个问题:任何产品的库存是否会超过一个数量?库存中的任何数量是否会与一种以上的产品相关?如果您在这两种情况下的回答都是“否”,只需将该列放入主产品表中即可。
【讨论】:
关于缓存机制的观点非常好。我不知道!我会在 OP 中为其他人发布指向它的链接。谢谢!以上是关于将库存数据与产品数据保存在单独的表中的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 SQL 将存储为 CSV(逗号分隔值)的表列的内容拆分为新表中的单独行吗?