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

これをアイテムと購入の2つのテーブルに分割することを検討します

アイテム:

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
)

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