【问题标题】:Ideas for stock management using mysql使用mysql进行库存管理的想法
【发布时间】:2012-04-02 00:58:20
【问题描述】:

我正在为一家出版公司创建一个数据库。该公司拥有大约 1300 本书和大约 6-7 个办公室。现在我创建了一个表格,显示所有位置的库存项目。对于用户,该表应如下所示:

Book Name          Location1            Location2          Location3 ......
History              20000               3000               4354
Computers             4000               688                344
Maths                 3046               300                0
...

我已经有一个 Books 表来存储书籍的所有详细信息,我还有一个包含办公室信息的办公桌。现在,如果我创建一个显示上述信息的库存管理表,如果我以以下方式存储我的数据,我最终会在一个巨大的表中重复很多:

Column1- Book_ID   Column2- Location_ID     Column3- Quantity
     1                  1                        20000
     1                  2                        3000
     1                  3                        4354
     2                  1                        4000
     2                  2                        688
   ...

所以,我认为这不是存储数据的最佳方式,因为它最终会以1300 (Books) X 7 (Locations) = 9100 rows 结尾。有没有更好的数据存储方式。现在我可以在 Books stable 中添加 7 列,但如果我创建一个新位置,我将不得不在 Books 表中添加另一列。

如果您认为上述方法合适或不合适,我将不胜感激。

【问题讨论】:

  • 除非你使用 Pentium 4 作为你的服务器 正确的索引 InnoDB 应该可以处理多达 1000 万条记录。使用这个,这是正确且常见的解决方案。
  • 第一个建议是去掉 location1、location2、location3 列,并有一个显示书籍 ID、位置 ID 和数量的子表。在当前结构中,如果添加或删除位置,则必须重新设计数据库。如果您使用 mysql,请坚持使用标准数据类型。不要进入奇怪的枚举和集合,因为这不容易移植到新平台。
  • @Vyktor - 即使是 Pentium4 处理这种数据量也应该没有问题(假设查询量相对较低)
  • @Brian - 我漂亮确定顶部的“表格”是 显示(即应用程序 UI)需要的样子,而不是实际的数据库架构。
  • 他清楚地说“表格应如下所示:”然后将 location1,2,3 列为列。

标签: mysql database database-design relational-database


【解决方案1】:

不,这是最好的方法。

您所拥有的是书籍和位置之间的多对多关系。在几乎所有的情况下,这作为两个主要实体之间的“关联”表存储在数据库中。在您的情况下,您还有关于该关联的其他信息,即它是“库存”或“数量”(或者,如果您将其视为图形,则连接的 幅度 或边-重量)。

因此,您可能看起来有很多“重复”,但实际上并没有。如果您尝试以任何其他方式执行此操作,那么它的灵活性将大大降低。例如,根据您现在的设计,它不需要任何数据库架构更改来添加另外一千本书或另外 20 个位置。

如果您尝试将图书数量放入 Locations 表中,或将 Locations 放入 Books 表中,则需要您更改数据库的布局,然后重新测试任何可能使用它的代码.

【讨论】:

  • 但这会导致我每次添加另一个办公室时多出 1300 行?
  • 通常是的,但没关系,因为办公室有 1300 本书,那么你应该有 1300 行来存储这些信息
  • 不一定;如果给定位置的给定书籍的数量为零,则可以简单地省略该行。但什么是 1300 行?这对于任何体面的数据库系统来说都不算什么。
  • @Namit - 正如其他人所说,额外的几千行不会对数据库产生太大的性能影响,特别是如果您在用于查询的字段上有索引数据。添加 10,000 行可能会在插入时产生影响,但即便如此,只要有索引,您应该完全没有问题。此外,关联表中没有行意味着“无库存”或“0”,您可以限制仅跟踪您拥有的库存而不是您的库存所需的行数没有.
【解决方案2】:

这是最常见(也是最有效)的解决方案。大多数框架,如 Django、Modx 和其他几个框架仅通过中间表实现 Many2Many 关系,使用外键关系。

确保正确索引表。

ALTER TABLE stock_management add index (Book_ID), add index (Location_ID)

【讨论】:

    【解决方案3】:

    这确实是最好的方法;你有 9100 个独立的数据要存储,所以你确实需要 9100 行(更少,真的;数量为 0 的行可以省略。)其他排列数据的方式需要在位置时改变表的结构已添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 2014-01-27
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多