我要用组态软件做一个电力质量监测系统,用sql server做后台数据库。其中涉及到每一个回路的三相电压、电流的1至31次谐波含量的数据,而且现场回路很多,甚至有几十个回路。要求数据存储间隔为1分钟,所以数据量很大。这些谐波数据最终用途就是存储,显示,和做报表,不用于其他计算。
一个三相回路的谐波含量数据大致情况是这样的:
电压谐波:HUa,HUa2,HUa3,...,HUa31(31个字段); HUb,HUb2,...,HUb31(31个字段); HUc,HUc2,...,HUc31(31个字段);
电流谐波:HIa,HIa2,HIa3,...,HIa31(31个字段); HIb,HIb2,...,HIb31(31个字段); HIc,HIc2,...,HIc31(31个字段)
还有其他的一些电参数,但是字段相对较少,可以根据情况设计成几个数据表。现场的三相回路估计很多,比如几十个回路,那对于谐波含量来说,就有几十个上面列出来的字段组了。这种情况,数据表怎么设计比较合理啊?是按照电压电流分类设计成两个数据表合适呢,还是分成Ua,Ub,Uc,Ia,Ib,Ic这样来分呢?或者还有没有其他的更好的方案啊,假如有20个回路的话。
对你的业务不是很懂,但是如果不考虑数据量大的特点的话,个人感觉上可以统一你所谓的“几十个回路”,使用一个 Type 字段表示是那种回路,这样表的数量将大为减少。
我还不知道各 HUa_x 的类型该是什么(INT?),但如果不涉及计算,仅仅是做报表,个人还感觉与其弄成 x 个字段,还不如弄一个综合字段 HU ,其值为 varchar(xxx),比如 a1|a2|a3|……,这样也不会限制为 31 个,更不会牵涉到字段的更改,对业务逻辑来说,表达的是多次 谐波含量 的综合数据,或许看上去更简洁些,只是当你如果要对各次的数据进行统计、计算等,这样就很不好了,就要分成多个字段各自记录。
Table_H_Type: TypeId, Title
0, 电压谐波
1,电流谐波
Table_H_Data:Values, TypeId
xx|xx|xx|xx|……, 0
xx|xx|xx|xx|……, 1
xx|xx|xx|xx|……, 0
xx|xx|xx|xx|……, 0
因数据量大,建议定时的进行历史数据清理,比如每个月的最后一天正点时刻将当月的数据挪动到一张历史数据表(再此之前已经做过各项报表打印工作),使得当前表数据量最少,保持插入等的操作效率。
仅是个人建议,更多基于经验、理解,没有什么理论支撑,做简单的参考即可,呵呵。