0

我想跟踪用户购买特定商品的次数。我的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

4 回答 4

2

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

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. 您始终可以将特定日期(通过过滤器)汇总到获取计数/实施视图以执行相同操作。

  2. 在性能和事务方面,最好插入一行而不是更新现有计数。

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

于 2012-12-30T21:20:19.900 回答
1

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

那张桌子也不应该被命名user_item还是什么?这个名字item让我想到了一个表,其中包含每种类型的项目(面包、牛奶)的信息,并且与用户无关。

于 2012-12-30T21:08:46.670 回答
0

我会考虑把它分成两个表:项目和购买

物品:

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
于 2012-12-30T21:18:52.963 回答
0

我会有3张桌子:

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

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

第三张桌子是:

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;
于 2012-12-30T21:19:07.377 回答