MySQL db设计产品

时间:2011-09-26 13:46:10

标签: mysql database-design

我正在开发一个Web应用程序,允许人们跟踪他们将要移动的产品。

实施例: 我仓库里有10个杯子。我将5个杯子移到ShopA,将5个杯子移到ShopB。然后我将3个杯子从ShopA移回我的仓库。

就我的数据库结构而言,我想到了一个看起来像这样的产品表: PRODUCT_ID LOCATION_ID 量

但它看起来有点笨拙。在示例中,我将在此产品的产品表中有1条记录,然后是2条,然后是3条。

我的问题是: 在这种情况下,对于此产品和每个产品的位置更改10行(每个项目1行而不是数量字段)是否更好?但如果这个表为很多用户存储产品,那么在很短的时间内,这个表就会有数百万行...我应该担心这个吗?

我对这种情况下的最佳做法非常感兴趣。

谢谢你!

5 个答案:

答案 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行:

  • 没有concurerency锁定。快速插入/删除项目。最简单的设计。

如果保存项目的数量:

  • Concurency更新更复杂。为了避免阻塞,我们在表中添加了新字段,并在每次更新之前验证/设置它。

Millions of rows - not problem for MySQL

另请参阅 NoSQL-store :对您来说可能效率更高。

P.S。抱歉我的英文。

答案 4 :(得分:-1)

在我的意见中无论情况如何 - >你只有两种方法可以遵循:

  • concurerency
  • no concurerency

简而言之,它意味着,您将在数据库中记录很多行,或者只记录该项目的数量。

Partiulary我更喜欢只记录该项目的数量(使用concurerency),有时管理起来更复杂,但是一个很好的例程来处理它,将来会给你带来任何麻烦,因为你的如果你不打算使用concurerency,数据库就不会长大。

但是当然,mysql可以很容易地容纳数百万行而不是问题,由你决定最好的aprouch。

预测您的数据库增长,测量它,如果数据库在短时间内会长大,那么最好使用concurerency方法。

祝你好运!