我有如下问题:一个用户购买商品记录表,字段如下:UserID,   GoodsID,    GoodsCount如果一个用户一次购买了多个商品,要把用户的购买行为记录到表中。
我是把  GoodsID,    GoodsCount 分别都做成了用逗号分隔的字符串传入到存储过程中(GoodsID 与 GoodsCount是一一对应的)。在存储过程中再把GoodsID,    GoodsCount 用逗号循环分割,循环的同时插入到上面的表字段中。不知道是否说明白了?这样是否比较浪费数据库的性能,因为用户购买了20种商品就要20 次插入数据,如果用户并发量很大性能肯定不是很好,有其他的处理方法吗?或者是否有更好的表结构?感谢指教!

解决方案 »

  1.   

    在web前段就分开,调用20次插入的存储过程
      

  2.   

    UserID,GoodsID,GoodsCount,GoodsNo(购买单号)
    1      1       1          1
    1      2       2          1
    1      3       3          1
    1      1       1          2
    1      2       2          2
    1      3       3          2
    ....
    2      1       2          3
    ...
    ...
    n      n       n          n
      

  3.   

    看楼主的问题没看明白,特别是“GoodsID 与 GoodsCount是一一对应的”,如果2次购买相同数量的相同物品,怎么区分?怎么可能是一一对应呢?
    这样的表结构,主键增加如2楼老大的“购买单号”就可以区分了。
    还有一点也不明白:插入购买数据到数据库,直接插入好了,为什么要经存储过程折腾一下再插入数据库呢?建好了如2楼的表结构,直接插入就OK了,类似:
    INSERT INTO 表(UserID,GoodsID,GoodsCount,GoodsNo)
    SELECT UserIDValue,GoodsIDValue,GoodsCountValue,GoodsNoValue
      

  4.   

    我是这个意思,比如买书,一个用户不会只购买一个商品。
    比如 A 书买了5本,B书买了3本,C书N书买了 2本假如有这样一个行为,那就是说用户买了N种书就要在存储过程中有 N 次写入数据的语句,这个写入有没有更节省效率的办法呢?
      

  5.   

    不需要存储过程吧,买了N种书,就插入N条SQL语句好了。执行N条SQL语句的花销可以忽略了吧。