各位作过报表系统的大侠发言 ( 积分: 200 )

  • 主题发起人 主题发起人 若宇
  • 开始时间 开始时间

若宇

Unregistered / Unconfirmed
GUEST, unregistred user!
>> (yanglibo)纵观所有的报表系统,需要显示的数据基本上可以分为以下三类:
1、人工数据数据:这些数据是直接由用户输入的。如:电力系统每天的发电计划等等,出入库数据等等。
2、外部数据 :这部分数据是由其它系统产生,为报表系统基础数据。如电力系统中 scada采集的数据。TMS 采集的电量数据。
3、计算数据 :这部分数据是由1,2为基础的施加业务逻辑(运算公式)以后得到的结果。

问题
1、大家在设计这样的报表系统数据库时,是怎样保存业务逻辑(运算公式),并且调用、识别呢?
 
>> (yanglibo)纵观所有的报表系统,需要显示的数据基本上可以分为以下三类:
1、人工数据数据:这些数据是直接由用户输入的。如:电力系统每天的发电计划等等,出入库数据等等。
2、外部数据 :这部分数据是由其它系统产生,为报表系统基础数据。如电力系统中 scada采集的数据。TMS 采集的电量数据。
3、计算数据 :这部分数据是由1,2为基础的施加业务逻辑(运算公式)以后得到的结果。

问题
1、大家在设计这样的报表系统数据库时,是怎样保存业务逻辑(运算公式),并且调用、识别呢?
 
对于保存业务逻辑(运算公式)个人建议:可以在数据库里
1.写视图(view),Create view aaa as select a,b, a*b as amount from tables
2.存储过程(procedure), create procedure bbb as select a,b, a*b as amount from tables
3.程序里写sql实现
如select a,b, a*b as amount from tables
其他如人工数据数据,外部数据必须建议数据表,存放在数据表里。
 
建议:
增加一个新表结构:数据描述,公式序号。建立数据与公式的映射。
默认,如公式序号=-1 则为数据表描述本身,否则为公式计算结果值
 
谢谢两位发言,
wwa,“建立数据与公式的映射”,说得好!
这正是关键呀,我在想,弄不好得写一个公式的分析器呀,并且要和数据连接起来
还是有难度的,小弟以前没做过这方面的。
希望各位作过、路过的大侠发言呀
 
查了一些资料,http://search.csdn.net/Expert/topic/562/562028.xml?temp=3.306216E-02
(以下引用一些上贴的内容)
现在想,在设计表的时候,如果想要灵活一些。结构扩展性要好一些,
就要采用,
例如:
>>通常我们设计数据库表的时候是这样的
ID   操作员姓名   操作员性别   出生年月   部门ID
1   张三      男       1974.1    1
2   李四      男       1975.6    5

改为
ID   项目名称   值
1   操作员姓名  张三
2   操作员姓名  李四      
3   操作员性别  男 
4   操作员性别  男
5   出生年月   1974.1
6   出生年月   1975.6
7   部门ID    1
8   部门ID    5
>>个人意见:这种设计确实在一定的情况下比较有用. 例如, 做一个法院系统, 其中的案件, 原告, 被告, 律师等是主要的对象, 数据量会很大, 属性比较明确, 并且在做report时, 会大量的用到他们之间的relationship, 所以这时候就要对将他们映射成每一个table, 他们的属性映射成table中的field. 相对的, 在这个系统中也有很多东西是变动较大, 并且数据量较少, 如法官信息, 法庭信息, 在不同地区会有不同的情况, 既属性不确定. 那就这样设计, 增加灵活性.换句话说, 你不应该为你的系统中的每种对象都单独设计一个table, 那样你会发现, 一个很小的系统都会有几十, 上百个table.
>>有位前辈曾教我,设计表时,有一个必要的原则是:
“字段是昂贵的,而属性是免费的”
当表中字段很多,报表与报表之间有很多也没有什么必然的联系,也就是你说的这种情况时,可以考虑用属性取代字段
比如:
有字段:A,B,C,D,E,F,G,H,I,J,K,L,M,N
设计一个表,只有两个字段:CodeName, CodeValue
CodeName下填A,B,C,D……这些字段名称,在CodeValue下填写他们相应的值
这样既避免了大量字段造成的数据冗余,又增强了数据库的灵活性。
当然,实际设计时只有CodeName, CodeValue两个字段是不行的,还要填加一些相应的字段以
便于跟其他表的连接,这也需要在数据完整性和数据冗余问题上多考虑一些
我做过一些数据库,遇到这种问题都这么搞
希望对你也有些帮助
这种做法太土,显然没有关系数据库的概念,完全是凭自己小聪明在做事情,照你这么做,我干脆在数据库里就放一张表字段为TableName,
CodeName, CodeValue,再建一张表描述表的结构,所有的数据都可以放进去了。“字段是昂贵的,而属性是免费的”这个在设计上实际不用考虑,以反映业务为主。
 
只能用偑服來表達我內心的感受~~~
 
樓主,
我基本上也是做報表的這類的程序。不過是一個人做,只要實現老板要求的功能就行
如果有時間可以相互學習
我的QQ:175282045 MSN:aifusen_3@hotmail.com
 
恩,大家都交个朋友,说的很有道理啊!
 
這需要通過長時間總結規律,然後再確定報表的不同需要。
我常常聽到人家說“萬能報表”,這是不會存在的。因為總有異常的現在就不萬能了。
 
后退
顶部