您可以简单地拥有一个Orders将项目(和数量)链接到用户的表。
Orders - 
  user_id (PK, FK -> Users Table)
  item_id (PK, FK -> Items table)
  quantity
  time (PK)
如果你还想跟踪交易,你可以有另一个这样的表:
Transactions -
  transaction_id (PK, FK -> Transaction table)
  user_id (FK -> Users table)
  time
Orders 表会更简单一些:
Orders - 
  transaction_id (PK)
  item_id (PK, FK -> Items Table)
  quantity
例子:
如果有 5 个用户通过相同的项目,在第一种方法中:
Orders:
user_id | item_id | quantity | time
1       |  99     |    1     |  31/10/2013 01:01:01
1       |  105    |    2     |  31/10/2013 01:01:01
2       |  99     |    1     |  31/10/2013 01:01:06
3       |  99     |    1     |  31/10/2013 01:03:00
4       |  99     |    1     |  31/10/2013 03:26:09
5       |  99     |    1     |  31/10/2013 04:11:16
如果有 5 个用户通过相同的项目,在第二种方法中:
Orders:
transaction_id | item_id | quantity
       123     |   99    |    1
       123     |   105   |    2
       124     |   99    |    1
       125     |   99    |    1
       126     |   99    |    1
       127     |   99    |    1
Transactions:
transaction_id | user_id | time
       123     |   1     |   31/10/2013 01:01:01
       124     |   2     |   31/10/2013 01:01:06
       125     |   3     |   31/10/2013 01:03:00
       126     |   4     |   31/10/2013 03:26:09
       127     |   5     |   31/10/2013 04:11:16
最后回答你的第二个问题:
这两种桌子设计都允许多个用户毫无问题地购买相同的物品。在第一个示例中,该Orders表有一个复合主键,PK(user_id, item_id, time_stamp)它允许不同的用户购买相同的项目,甚至在同一时间。在第二个示例中,Orders表具有复合主键PK(transaction_id, item_id),并且Transactions表具有PK(transaction_id)始终唯一的主键(可能从 MySQL 序列生成)。