如何跟踪购买的物品?

时间:2012-12-30 21:06:13

标签: database-design

我想跟踪用户购买某件商品的次数。我的item表目前看起来像这样:

ID  |  NAME  |  USER_ID  |
1   |  bread |  1        |
2   |  milk  |  1        |
3   |  bread |  2        |

跟踪购买商品的推荐方法是什么?我是否只需添加counter列,并在每次购买商品时增加价值?

ID  |  NAME  |  USER_ID  |  COUNTER  |
1   |  bread |  1        |  5        |
2   |  milk  |  1        |  1        |
3   |  bread |  2        |  3        |

4 个答案:

答案 0 :(得分:1)

如果您需要知道的是计数,那么请务必这样做。某些应用程序可能需要另一个列出每个“购买”的表格,例如,以便能够判断每个商品的购买时间(如果用户多次购买相同的商品)。

也不应该将该表命名为user_item或其他什么?名称item让我想到一个表格,其中包含每种商品(面包,牛奶)的信息,与用户无关。

答案 1 :(得分:1)

我建议在购买更多产品时插入新行,而不是更新产品的计数器。

PID  |  NAME  | CREATED_ON
1    |  bread | 05-12-2012 9:45 AM
2    |  milk  | 05-12-2012 11:09 AM


ID  |  PID  |  USER_ID  | CREATED_ON
1   |  1    |   1       | 31-12-2012 10:05 AM
2   |  2    |   1       | 31-12-2012 10:05 AM
3   |  1    |   2       | 31-12-2012 11:05 AM

为什么?

  1. 您总是可以将特定日期(通过过滤器)汇总到get 计算/实现一个视图来做同样的事情。

  2. 最好是插入一行而不是更新现有的计数 表现和交易明智。

  3. 最后,建议您添加CREATED_ON列(默认值 GETDATE())作为记录时间戳。

答案 2 :(得分:0)

我会考虑将其拆分为两个表:item和purchase

项:

ID  |  NAME  | 
1   |  bread | 
2   |  milk  | 

购买:

ID  |  ITEM_ID  |  USER_ID  | 
1   |    1      |     1     |
2   |    2      |     1     | 
3   |    1      |     2     |

至于特定用户购买每件商品的数量(查找用户#1购买的“牛奶”数量):

select count(*) from purchase where USER_ID = 1 and ITEM_ID = 2

答案 3 :(得分:0)

我会有3张桌子:

create table users (
  id number primary key,
  name varchar
)

create table items (
  id number primary key,
  description varchar,
  price double
)

,第3个表格是:

create table purchases (
  id number primary key,
  user_id number,
  item_id number,
  date timestamp, 
  foreign key user_id references users(id),
  foreign key item_id references items(id)
)

因此您可以查看用户通过

购买商品的次数
select count(*) from purchases where user_id = 123 and item_id = 456;