网站购物系统数据库设计策略

网站购物系统,有订单表,商品清单(一个订单有多个商品清单)表
问题:每个订单都有总价格,这个总价格是存储在订单表中还是动态计算该订单的所有商品清单的价格之和?
哪个方法比较好?请给出理由.
[106 byte] By [fifadxj-坦克车] at [2008-1-6]
# 1
商品清单表也保存了商品的价格?如果商品清单表的数据经常变化,动态计算会更合理一些;反之,则可以在订单表中存放总价。
# 2
1.通过 商品表字典中的价格提取,但注意在进行价格调整时候,要先把老价格的商品停用,在新增一笔
名称相同,价格不同的记录,这样做历史信息比较清楚,但是变价时较为烦琐

2. 价格通过动态计算来获得, 这样在进行商品字典时候调整价格时候不需要新增记录的操作。
WangZWang-先来 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 3
可能我没说清楚
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价格)会不会很慢?

fifadxj-坦克车 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 4
不过如果加一个orderprice字段的话,如果用户想添加/删除record的时候,我还要同步更新orderprice字段,如果别人手动修改了orderprice字段,数据库数据就不一致了
fifadxj-坦克车 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 5
从效率上说是第一种快,少了外联接查询,但从数据库一致性、冗余度来说第二种方法好。
比较好的方法只要从系统发展方向来考虑哪个操作用得比较多。但建议用第二种
WangZWang-先来 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 6
那同样的情况
product表的库存数也通过计算进货和出货纪录的总数来取得吗?进出或纪录可是越来越多的
fifadxj-坦克车 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 7
是的,应该表中要有一个数量、总费用字段
WangZWang-先来 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 8
不过如果加一个orderprice字段的话,如果用户想添加/删除record的时候,我还要同步更新orderprice字段,如果别人手动修改了orderprice字段,数据库数据就不一致了
----------------------------------
如果你没有这个字段,别人手动删除record记录的话,你就亏钱了。:)
ww3347-新来的 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 9
学习一下
yjlhch-爱拼才会赢 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 10
1.通过 商品表字典中的价格提取,但注意在进行价格调整时候,要先把老价格的商品停用,在新增一笔
名称相同,价格不同的记录,这样做历史信息比较清楚,但是变价时较为烦琐

2. 价格通过动态计算来获得, 这样在进行商品字典时候调整价格时候不需要新增记录的操作。
-----------------------------------------------------------------------------------
我认为这种方式好,数据库的结构明晰。
另外我想在实现的时候是否可以先把客户在网站上选中的商品的price缓存在应用程序的变量中或者放在一个Datagrid里,客户在网站操作时只利用这些数据进行计算,等到提交时才将计算出的总价存回,放在楼主说的第一种方式的orderprice里,这样数据库操作就少很多。不过有个缺点就是price可能和数据库的同步比较难一点。
# 11
我觉得还是存在order表比较好一点,毕竟一张订单的金额是不会随便乱改的了!
xiaoku-野蛮人-v at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 12
dv.ouou.com
video.daqi.com
fifadxj-坦克车 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,基础类...
# 13
楼主可以看一下ASP+SQL2000的方面的书,如果要具体一点(代码太大)