【发布时间】:2020-06-27 08:18:12
【问题描述】:
我正在为放置在房子周围不同房间的传感器设计一个家庭数据库。到目前为止,我已将数据库映射如下:
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_room 和 tbl_sensortype_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
因此,在此连接表中包含另一个称为“实例”的列是否明智(从设计角度来看是可以接受的),以便我可以轻松地区分同一房间中相同类型的两个传感器?还是有更好/更可取的方法?即我的联结表将被定义为:
tbl_room_sensortype_measurementtype = id, room_id, sensortype_measurementtype_id, instance
然后,当我想从传感器记录一个值时,我的值表将被定义为:
tbl_values = room_sensortype_measurementtype_id, value, time
我希望我的问题是有道理的(我正在学习数据库设计作为一个“有趣”的项目)。 谢谢, 马丁
【问题讨论】: