- 主题:请教多对多表设计问题
有多个测试小队,每个小队有多个测试人员,每个人员有多个测试设备(手环),需要手机不同的设备在不同的人不同的小队的使用数据。
初步设计3个表结构:设备表,人员表,队伍表(2个外键设备ID和姓名ID)。但是总是感觉有点不对劲。
请教大佬怎么怎么设计。刚学习不懂咋合理设计。多谢。
--
FROM 117.136.100.*
多谢大佬,
如果设计一个数据表,包含team name, person name, chipid和采集的各个数据字段是不是就合理点了?
另外,人员的一些基本情况信息,如email、mobile等是放在person表中,还是在单独建一个person info表比较好?
【 在 a0123456789q 的大作中提到: 】
: You might need some middle tables, each of which stores nothing but the relation between another two tables;
--
FROM 117.136.100.*
多谢指点
【 在 oldwatch 的大作中提到: 】
: 首先,区分(变化不大的)基础数据和(不断增长的)业务数据
: 前者:分组,设备, 人员
: 后者:设备产生的数据
: ...................
--
FROM 117.136.100.*
大佬,几个表基本就按照您的这个思路进行设计了。
刚才设计的时候发现设备和分组中都是有用户的,这个用户字段是不是要设置成m2m指向用户表?
【 在 oldwatch 的大作中提到: 】
: 首先,区分(变化不大的)基础数据和(不断增长的)业务数据
: 前者:分组,设备, 人员
: 后者:设备产生的数据
: ...................
--
FROM 39.144.34.*
都不是从属的关系。
也就是说一个人可以使用多个设备,一个设备可以被多个人使用,一个人又可以被分到不同的小组。
【 在 oldwatch 的大作中提到: 】
: “设备有用户” 是说设备*从属*于用户?
: “分组有用户” 是说分组*包含*用户?
: 想清楚是不是非得多对多就行
: ...................
--
FROM 39.144.34.*
感谢您和几位大佬的指点。结合自己查询的资料,感觉越来越清晰了。
目前是:
3个实体表:人、小组、设备
2个关系表:小组-人,设备-人
1个数据表:设备收集上来的数据sensor_data
再想请教,这个数据表要不要包含人名ID、小组ID、设备chipid 3个字段?
这样根据这个数据产生时的chipID就能找到所属的人和对应的小组了。
ps:同一个测试时间,一个人只能使用一个测试设备在一个小组中进行测试。也就是说测试设备产生的数据在时间维度上是唯一的。只能等别人用完再用。
【 在 Yuguo15666 的大作中提到: 】
: 实体表:设备表 人员表 队伍表
: 关系表:队伍-人员关系表 设备-人员关系表
: 设备是分配给人员而不是队伍的,所以不需要队伍设备关系表,要查队伍和设备的多对多的关系,是通过队伍-人员 和 人员-设备 两个关系进行关系运算,也就是连表sql,查询出来的。
: ...................
--
FROM 39.144.34.*
您说的对。。。
主要是设备都是在野外使用,而且使用时间很短,3分钟左右现场轮换这种。。。
所以想在数据采集的时候把chipid携带者,整理的时候根据chipid再找到关联的人,便于分析
【 在 oldwatch 的大作中提到: 】
: 如果多对多关联是发生在时间维度上的话(领了,还了,又领了,...)
: 未必需要在基础表里持久记录/维护,一般是记录一个变迁的流水
: 直接在生成的业务数据里头把当前使用人/当前分组统统记下就完事了
: ...................
--
FROM 39.144.34.*
谢谢您的回复,很清晰。
实际是任何设备以及分组都是不固定的,
现在的设计就是3个实体表一个业务数据表,数据表中包含3个实体字段。如下:
设备 (ID,名称,.....)
小组 (ID,名称,.....)
人员 (ID,名称,性别,...)
测试活动(ID,chipID, msgID, 测试时间,测试员人员ID,测试用设备ID,测试小组ID, 测试结果值1,测试结果值2,.......)
遇到的问题就是以前业务数据过来后直接丢到数据库(时间、chipID \msgID\业务数据。。。。),现在表修改了就要把3个实体字段与数据字段合并再插入到数据库。不知道这样会不会影响数据插入和查询的效率。
【 在 Yuguo15666 的大作中提到: 】
: 从你描述的业务情况来看,人员和设备并没有稳固的分配关系,只是在一次测试中临时使用产生关系,所以不需要人员设备关系表。再假定一个人只属于一个组:
: 实体表:
: 设备 (ID,名称,.....)
: ...................
--
修改:annodom FROM 39.144.34.*
FROM 39.144.34.*
是相对比较低,而且小组信息不是观测重点,
重点是人和设备的数据。现在设计就是没用关系表。
【 在 oldwatch 的大作中提到: 】
: 人和小组的关系如果相对静止
: 那业务数据关联到人就够了,反正基础表里有人-组关联,不用冗余一个小组信息
:
--
FROM 39.144.34.*
现在就很麻烦了。。。因为以前数据是通过独立线程直接保存到数据库的。msg只携带了chipID和业务数据。。。
现在想增加人和小组字段,但是独立线程的数据在保存之前是没法获取这些信息的。
在想要不要再建一个中间表:id,小组id,人员id,设备id(chipid)来解决
【 在 lipp 的大作中提到: 】
: 你这样设计容易丢失原始信息,后面没法为数据清洗提供基础数据了。
: 理论上原始设备的时间值可能是错的,因为刚开机还没校准。
: 设备ID与人员ID的绑定关系可能是重合的,因为有人忘了解绑,有人忘了绑定,有人绑了多设备。
: ...................
--
FROM 39.144.34.*