我正在为放置在不同房间的房子周围的传感器设计一个家庭数据库。到目前为止,我已将数据库规划如下:
tbl_floor = id, name - (e.g 1, first)
tbl_room = id, floor_id, name - (e.g 1, 1, lounge)
tbl_sensortype = id, name - e.g (1, dht11)
tbl_measurementtype = id, name - e.g (1, temperature)
传感器和测量之间存在多对多关系(例如dht11可以做温度和湿度),因此我有一个连接表:
tbl_sensortype_measurementtype = id, sensortype_id, measurementtype_id - (e.g 1, 1, 1) for a dht11 sensor's temperature measurement (it does other things too)
现在我的问题来了:
每个房间可能有多个相同类型的传感器(例如,一个房间有一个带温度传感器的地坛和一个室温传感器)。因此,表tbl\u room和tbl\u sensortype\u measurementtype之间存在多对多关系,但这可能导致连接表中的行不唯一:
tbl_room_sensortype_measurementtype = room_id, sensortype_measurementtype_id - (e.g 1, 1) is a dht11 sensor's temperature measurement in the lounge
但是如果把第二个dht11传感器放在同一个房间里,它会有同一排。
我可以在连接表中放置一个id,这样它就变得唯一了,但是很难区分它们,即
tbl_room_sensortype_measurementtype = id, room_id, sensortype_measurementtype_id
因此,在这个连接表中包含另一列称为“示例”的列是否明智(从设计Angular 来看是可以接受的),以便我可以轻松区分同一房间中相同类型的两个传感器?还是有更好/更可取的方法?i、 e我的连接表定义如下:
tbl_room_sensortype_measurementtype = id, room_id, sensortype_measurementtype_id, instance
然后,当我想记录传感器的值时,我的值表将定义为:
tbl_values = room_sensortype_measurementtype_id, value, time
我希望我的问题是有意义的(我学习数据库设计作为一个“有趣的”项目)。谢谢你,马丁
1条答案
按热度按时间jdg4fx2g1#
你可以用一张新table代替
tbl_room_sensortype_measurementtype
在房间和下面的传感器之间Map,这里每个传感器都有一个独特的
id
尽管房间和传感器类型相同。此表以后可以与tbl_sensortype_measurementtype
在sql中获取度量类型。instance
在唯一性方面成为冗余列,因为它已经被id
. 可以使用id
无条件地达到任何期望的结果instance
. 从设计的Angular 来看,除非有sql查询可以从直接查询的速度方面受益instance
像查询房间的第一个示例之类的列,不需要它。