【发布时间】: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