日期:2014-05-18  浏览次数:20520 次

数据库设计和查询的问题
现在需要实时记录一种机器(这种机器又有很多小型号)的运行状态(频率1分钟每次)

一.数据内容
记录的数据包含2级
1.产生数据的部位
2.每个部位的数据分2部分,一部分是数字数据(有多个数值比如温度,转速,运行时间等等),一部分是字节数据(也有多个数据,比如开关1的 on/off, 开关2的on/off)

二.数据的分类
 这种机器因为有很多小型号,导致在每种型号上收集的数据量有不同
比如A型号 只能收集2个部位, B型号1个部位 C 型号3个部位
并且 每个部位收集的数据量也不同
A型号的A-1部位能收集30种数据
A型号的A-2部位能收集到6种数据
B型号的B-1部位能收集到40种数据
B型号的B-2部位能收集到20种数据


三.业务需求
能够对同一种型号的同一个部位的数据进行统计
比如 
1.分部位显示所有数据(a.最新的数据.b.用tab切换的方式显示不同部位)
2.A-1部位的第1个到第十个数据求分别求平均值
3.显示A-1部位的第1个数据的历史趋势图
等等

请问要怎么设计数据库

PS: 我的原始设计
刚开始不知道每个型号的不同部位要分别显示 所以设计如下
表1
设备编号 varchar
数字数据(数据间用,隔开) varchar
字节数据 binary
记录时间 datetime

并建立一个辅助表 相同类型的相同部位的相同类型的数据平均值
表2
设备类型 varchar
数据类型 int
已有的数据总值 float
已有的数据总条数 int
当前平均值 float


如果在 表1中 增加列 来标识部位 感觉计算很麻烦(分部位显示的时候)



请问大家 我需要怎么设计这个数据库?







 











------解决方案--------------------
数字数据(数据间用,隔开) varchar
使用一张表感觉要好点。

部位最好是可以全部列出来,分别建立表
------解决方案--------------------
恩,那可以参考DISCUZ动态建表建字段。就是有新的部件的时候就新建一个表
个人觉得使用字段来代替一个应该要使用表的情况,以后会很麻烦
------解决方案--------------------
其实还是看需求吧
有的很多参数只要显示出来查看就行的,那直接使用字段,有的参数要分别查询之类的,就需要表。
建表的话个人觉得是没有一个固定的模式,为了需求有些情况还需要冗余,看最终的需求来定
------解决方案--------------------
可以参考:
HTML code

一.部位分类表 {部位ID,部位名称,符号,数据类型}
e.g.
部位ID  部位名称 符号  数据类型
-----------------------------------
1     温度   ℃  数字数据
2    运行时间 h 数字数据
3   on/off  on/off  字节数据

二.机器型号分类表{机器型号,名称}
e.g.
机器型号 名称
-----------------------------------
A    A型号设备
B    B型号设备
C    C型号设备

三,机器设备数据表{机器型号,部位ID,数值}
e.g.
机器型号   部位ID 数值
-----------------------------------
A        1  50
A        2  30
A        3  28.5
... ...