网站购物系统数据库设计策略
网站购物系统,有订单表,商品清单(一个订单有多个商品清单)表
问题:每个订单都有总价格,这个总价格是存储在订单表中还是动态计算该订单的所有商品清单的价格之和?
哪个方法比较好?请给出理由.
1.通过 商品表字典中的价格提取,但注意在进行价格调整时候,要先把老价格的商品停用,在新增一笔
名称相同,价格不同的记录,这样做历史信息比较清楚,但是变价时较为烦琐
2. 价格通过动态计算来获得, 这样在进行商品字典时候调整价格时候不需要新增记录的操作。
可能我没说清楚
product(id,name,buyprice)
order(id,customerid,date)
record(id,orderid,productid,sellprice) orderid参照order表的id
现在需要得到order的价格,是在product表中加一个orderprice呢,还是用
select sum(sellprice) from record join order on record.orderid = order.id
where orderid = ?
请给出选择理由或更好的办法
我觉得效率上应该是第一种快,应为动态计算的话还要做表连接,还要做计算,如果是生成一张所有order的表格(包括order价格)会不会很慢?
不过如果加一个orderprice字段的话,如果用户想添加/删除record的时候,我还要同步更新orderprice字段,如果别人手动修改了orderprice字段,数据库数据就不一致了
----------------------------------
如果你没有这个字段,别人手动删除record记录的话,你就亏钱了。:)
1.通过 商品表字典中的价格提取,但注意在进行价格调整时候,要先把老价格的商品停用,在新增一笔
名称相同,价格不同的记录,这样做历史信息比较清楚,但是变价时较为烦琐
2. 价格通过动态计算来获得, 这样在进行商品字典时候调整价格时候不需要新增记录的操作。
-----------------------------------------------------------------------------------
我认为这种方式好,数据库的结构明晰。
另外我想在实现的时候是否可以先把客户在网站上选中的商品的price缓存在应用程序的变量中或者放在一个Datagrid里,客户在网站操作时只利用这些数据进行计算,等到提交时才将计算出的总价存回,放在楼主说的第一种方式的orderprice里,这样数据库操作就少很多。不过有个缺点就是price可能和数据库的同步比较难一点。