1.用户表
2.报纸名称表
3.单价表。
4.报纸数量表请问单价表要如何设计才合理?情怳如下:有很多用户,每个用户都有一些报纸,数量都不一样并且单价也不一样,报纸的单价大多数用户都是一样的,但还是有一部分用户单价不一样 
(如:广州日报默认用户单价是1元也就是大多数用户的单价但有些用户可能是0.9元也可能是0.8元) 在添加报纸时要指定一个默认单价。
设计一:
如果就如上面设计一个单价表,里面保存所有用户所有报纸的各自单价,那么在新增加用户时单价怎么办?
(因为报纸很多所以不可能在添加用户时或添加用户后再逐个逐个的添加报纸的单价到单价表)设计二:
增加一个默认单价表,再增加一个用户单价表这样的话在添加报纸时输入的单价就保存在默认单价表中,并向用户单价表中插入该报纸的默认单价(有多少个用户就插多少条记录,就是用户ID不一样)然后再修改某些用户的单价。
请问还有更合理的设计吗。本人只有20分全给你们了。

解决方案 »

  1.   

    一种设计思路如下。1.用户表 (uid,uname, uaddress, ...)
    2.报纸名称表 (nid, nname, standardPrice,...)
    3.单价表。() ?? 
    4.报纸数量表 (uid, nid, actualPrice,...)当新增用户时,可以直接取 报纸名称表 中的standardPrice, 如果是老用户以前订过的报纸,则可以用 报纸数量表 中的 last (actualPrice)
      

  2.   

    定时把每天的记录下来 event
      

  3.   

    4.报纸数量表 (uid, nid, actualPrice,...)这张表一般来说叫作订单记录可能更合适。报纸订阅记录表 (uid,nid,qty,begindate,enddate,actual,price,..)userA, 广州报, 100, 2009-09-10 2009-09-19, 0.8元程序取最后一次的 (userA, 广州报) 记录中的价格为参考价格。
    一般来说,应该保持所有的订阅历史记录,这样可以方便的进行分析。
      

  4.   

    每天都变?用户订报是这样?userA, 广州报, 99,  2009-09-10
    userA, 广州报, 97,  2009-09-11
    userA, 广州报, 104,  2009-09-12
    ...???建议你能举例说明你的情况,否则这样一直猜来猜去很难理解你真正的情况以提出合理的建议。建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
      

  5.   

    就是你所说的那样啊。用户的数量每天都会变的,订的时间也不一定的,明天要后天就不要再过几天又要都有可能)
    所以每天都要进行各种报纸的总数合计,而且每天还要将各用户报纸数量及单价存留为历史记录用户订报是这样? 2009-09-10 userA, 广州报, 50,  2009-09-10 
    userB, 广州报, 97,  2009-09-10 
    userC, 广州报, 100,  2009-09-10 
    userA, 羊城晚报, 150,  2009-09-10 
    userB, 羊城晚报, 197,  2009-09-10 
    userC, 羊城晚报, 200,  2009-09-10 
    userC, 南方都市, 30,  2009-09-10 还要进行每种报纸数量的合计2009-09-11userA, 广州报, 不要了,  2009-09-11 
    userB, 广州报, 50,  2009-09-11 
    userC, 广州报, 50,  2009-09-11 
    userA, 羊城晚报, 不要了,  2009-09-11 
    userB, 羊城晚报, 500,  2009-09-11 
    userC, 羊城晚报, 50,  2009-09-11 
    userC, 南方都市, 10,  2009-09-11 
    还要进行每种报纸数量的合计2009-09-12userA, 广州报, 50,  2009-09-12 
    userB, 广州报,950,  2009-09-12 
    userC, 广州报, 30,  2009-09-12 
    userA, 羊城晚报, 100,  2009-09-12 
    userB, 羊城晚报, 80,  2009-09-12 
    userC, 羊城晚报, 40,  2009-09-12 
    userC, 南方都市, 不要了,  2009-09-12 
    还要进行每种报纸数量的合计
    如果这样设计,系统就要将昨天的所有用户的所有报纸重新插入一遍,将时间改为今天
    然后再修改用户变数的报纸数量
    这样也能保存了历史记录不知道这种方法合不合理。 
      

  6.   

    不必要这样吧userA, 广州报, 不要了,  2009-09-11  --》不记录到明细日志表
    userB, 广州报, 50,  2009-09-11 
    userC, 广州报, 50,  2009-09-11 
    userA, 羊城晚报, 不要了,  2009-09-11  --》不记录到明细日志表
    这样,统计直接对明细日志表操作就可以了
      

  7.   


    user(uid, rid, uname, uaddress  ...)        order(oid, uid, time, totalPrice  ...)        -- 订单表order_items(oiid, oid, pid, rid, items ...)    -- 订单和报纸表paper(pid, rid, pname, nowPrice  ...)         -- 各类报纸信息详细表rebate(rid, time, rebate ...)                 -- 折扣表, rebate是折扣order_log(lid, pid, items, time, totalPrice  ...)         -- 订单的日志表
    例如,1  在2009-10-1的时, A用户下一份订单, 要广州日报10份, 南方日报100份   -- 插入order表一条, 分别记录用户id, 时间, 总价,  或报纸数量等
       -- 插入order_items表两条记录, 分别是广州日报和南方日报对应的价格, 数量, 订单号, 折扣
          (折扣*价格=报纸价, 因为折扣可能每天不同, 每人不同, 所以要另建一表)
       (如果在某时间B用户要下单, 则如上操作加记录)
    2  要定时统计order表和order_items(每天或每月)写入order_log表, 并删除旧的数据
       (order_log表可以根据业务需要自己灵活设计)
    3  order表, order_items表, order_log表 这样设计可以做到什么?   -- 可以对order_items表统计每天买多少份广州日报, 南方日报 (并插入记录到order_log表)
       -- 可以对order_log表统计每天每月那种报纸买得最多, 或买得最多的报纸是什么时间
       -- 可以知道那个用户对那种报纸感兴趣或订得最多
       -- 可以统计那个价格的报纸最好卖
       (这样设计表基本满足以上要求)
       
    4 折扣可能每时每刻变化, 当天报纸价 = 报纸标准价 * 那个时间的折扣价
      (如果对某些用户有优惠, 把优惠价id写进用户信息表)
      

  8.   



    还是不符合需求。。我不要折扣,是要直接的报纸单价。就是ACMAIN_CHM用户说的那样 每天都变。。
      

  9.   

    用户表(User_ID,User_Name,User_Address)
    报纸表(BZ_ID,BZ_Name,price,Amount)
    用户报纸(User_ID,BZ_ID,Default_Price,User_Price,Default_Amout,Uer_Amount),设置默认单价和用户单价,默认数量和用户数量,用户单价默认为默认单价,数量默认为0
    添加用户或报纸时,只更新用户和报纸表
    删除用户或报纸时,如果用户报纸表存在相关记录,则写触发器更新用户报纸表,删除相关的记录用户订报纸或者退报时,
    用户表添加触发器,更新用户报纸表的用户数量和用户单价
      

  10.   

    1.用户表(user_ID,user_Name)
    2.报纸表(nid, nname, standardPrice,...) 
    3.报纸订单表 (userid, baozhiid, actualPrice,统计日期,shuliang...)
    具体方法如下:
    假设需求设置的结账时间为1个月一次,新增的订单记录:
    userA,广州报, 104,1,53
    在这之后的31天中,userA与广州报的这种组合在数据库中不再插入新的记录,只是update 统计日期和数量:
    userA,广州报, 104,2,56
    userA,广州报, 104,3,不要
    userA,广州报, 104,4,87
    直到统计日期的字段为31时,在向数据库中插入一条新的
    userA,广州报, 104,1,50的记录,如此循环