我想跟踪用户购买某件商品的次数。我的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 |
答案 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
您总是可以将特定日期(通过过滤器)汇总到get 计算/实现一个视图来做同样的事情。
最好是插入一行而不是更新现有的计数 表现和交易明智。
最后,建议您添加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;