【问题标题】:How to design a MySQL database for storing sell items如何设计用于存储销售商品的 MySQL 数据库
【发布时间】:2022-01-20 01:52:09
【问题描述】:

我一直在尝试设计一个 MySQL 表来存储客户购买的商店项目。我不知道应该采取什么方法来设计一张好桌子。

我的第一个选择是:

id bill_id_fk item1_id item2_id item3_id item4_id

在这种方法中,我将创建可能有 20 列的商品(假设客户一次最多可以购买 20 件商品)。项目的 ID 将存储在特定 bill_id_fkitem(n)_id 列中。 我对这种方法的担忧是,以后很难查询特定商品,例如特定商品已售出多少次。

我的第二个意见是:

id bill_id_fk item_id
1 1 23
2 1 29
3 2 23

在这种方法中,我将只创建 3 列,并为每个项目创建一个带有 bill_id_fk 的行以用于特定账单。 在这种方法中,更容易查询特定商品的销售计数。但我担心的是在使用应用程序时会创建成千上万行,随着时间的推移,这将如何影响应用程序的性能?

我想就设计此类数据库的最佳做法征求您的意见。或者我应该采取其他方法吗?

【问题讨论】:

  • 第二种方法会更快,自己进行基准测试。此外,您可能需要另一列用于金额,这样购买 20 个相同 SKU 的用户不会创建 20 行

标签: mysql database database-design database-normalization


【解决方案1】:

您不可能选择第一个,第二个是适合您情况的最佳方法。

如果您索引了正确的列,它不会影响您的性能。

当涉及到项目时,可以在您的账单表中添加一个包含项目编号的列,例如:

bills (id - total_price - user_id - item_counts)
bill_items (id - bill_id - item_id - item_price)

【讨论】:

  • 感谢您的建议。在第二种方法中,id 将是主键并被索引。为了提高查询性能,我应该在此处索引哪些其他列?
  • bill_id - item_id - user_id 将非常有用,您还可以将索引添加到item_counts,以防您根据账单项目的数量生成报告,例如有多少用户购买了超过 10 件商品。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多