浅谈数据库设计技巧(下).txt[3]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 comiunknown 的 blog

t_id          int             不允许为空      每餐总表标识,和eatdata1.totle_id关联
c_id         int             不允许为空      员工标识标识,和clerk_table.clerk_id关联
price        money       不允许为空      每人每餐花费

  其中,就餐计费细表(eatdata2)的记录就是把每餐总表(eatdata1)的一条记录按就餐员工平摊拆开,是个不折不扣的冗余表。当然,也可以把每餐总表(eatdata1)的部分字段合并到就餐计费细表(eatdata2)中,这样每餐总表(eatdata1)就成了冗余表,不过这样所设计出来的就餐计费细表重复数据更多,相比来说还是上面的方案好些。但是,就是就餐计费细表(eatdata2)这个冗余表,在做每月每人餐费统计的时候,大大简化了编程的复杂度,只用类似这么一条查询语句即可统计出每人每月的寄餐次数和餐费总帐:

select clerk_name as personname,count(c_id) as eattimes,sum(price) as ptprice from eatdata2 join clerk_tabsle on (c_id=clerk_id) join eatdata1 on (totleid=tid) where eat_date>=convert(datetime,'"&the_date&"') and eat_date

  想象一下,如果不用这个冗余表,每次统计每人每月的餐费总帐时会多麻烦,程序效率也够呛。那么,到底什么时候可以增加一定的冗余数据呢?我认为有2个原则:

  1、用户的整体需求。当用户更多的关注于,对数据库的规范记录按一定的算法进行处理后,再列出的数据。如果该算法可以直接利用后台数据库系统的内嵌函数来完成,此时可以适当的增加冗余字段,甚至冗余表来保存这些经过算法处理后的数据。要知道,对于大批量数据的查询,修改或删除,后台数据库系统的效率远远高于我们自己编写的代码。

本文关键:浅谈数据库设计技巧(下).txt
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top