我正在开发一个Web应用程序,允许人们跟踪他们将要移动的产品。
实施例: 我仓库里有10个杯子。我将5个杯子移到ShopA,将5个杯子移到ShopB。然后我将3个杯子从ShopA移回我的仓库。
就我的数据库结构而言,我想到了一个看起来像这样的产品表: PRODUCT_ID LOCATION_ID 量
但它看起来有点笨拙。在示例中,我将在此产品的产品表中有1条记录,然后是2条,然后是3条。
我的问题是: 在这种情况下,对于此产品和每个产品的位置更改10行(每个项目1行而不是数量字段)是否更好?但如果这个表为很多用户存储产品,那么在很短的时间内,这个表就会有数百万行...我应该担心这个吗?
我对这种情况下的最佳做法非常感兴趣。
谢谢你!答案 0 :(得分:2)
问题是:您的广告资源中的哪些项目具有唯一标识? 每个杯子上都有不同的条形码吗? (不要介意杯子;让我们来谈谈书籍。)
如果您的商品具有唯一标识符(他们自己的条形码或RFID标签),那么每件商品肯定需要一行。当您获得,重新定位或出售每件商品时,您将更新其行以反映其新位置。
例如,考虑图书馆中的书籍。每本书都是独特的。即使图书馆拥有该书的两本副本,也会单独处理。
另一方面,如果这些项目可以互换,就像书店中的书籍副本一样,那么您可以简化假设您可以为每个位置的每个项目计算项目数。书店里有五本最新的哈利波特书架。当顾客购买时,书店现在有四份。当书店收到另一盒时,它有14份。
当然,这两种方法在重新定位库存时发生的DBMS事务的性质完全不同。第二种方法看起来更像是复式簿记,第一种方式就像产品普查一样。
考虑到目前数据存储的便宜程度以及RFID标签等唯一标识符的激增,您最好使用第一种方法,每个项目都有一行。
答案 1 :(得分:2)
我认为简单的问题是你想要更简单的可编程性,还是更小的数据库?随着存储尽可能便宜,而且只是越来越便宜,答案很明确:为您节省大量的胃灼热,并以一种为您提供最简单代码的方式构建数据库。
答案 2 :(得分:2)
我同意Ollie Jones的回答,但我想补充一点,“Double Entry Bookkeeping”方法将是这样的行:
CREATE TABLE [Transactions] (
[FromLocationId] /* foreign key to the locations */,
[ToLocationId] /* ditto */,
[Amount]
)
这样,每个事务只有一行。
答案 3 :(得分:1)
如果每件商品保存1行:
如果保存项目的数量:
Millions of rows - not problem for MySQL
另请参阅 NoSQL-store :对您来说可能效率更高。
P.S。抱歉我的英文。
答案 4 :(得分:-1)
在我的意见中无论情况如何 - >你只有两种方法可以遵循:
简而言之,它意味着,您将在数据库中记录很多行,或者只记录该项目的数量。
Partiulary我更喜欢只记录该项目的数量(使用concurerency),有时管理起来更复杂,但是一个很好的例程来处理它,将来会给你带来任何麻烦,因为你的如果你不打算使用concurerency,数据库就不会长大。
但是当然,mysql可以很容易地容纳数百万行而不是问题,由你决定最好的aprouch。
预测您的数据库增长,测量它,如果数据库在短时间内会长大,那么最好使用concurerency方法。
祝你好运!