sql—如何设计具有潜在非唯一行的多对多关系中的连接表

ttcibm8c  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(221)

我正在为放置在不同房间的房子周围的传感器设计一个家庭数据库。到目前为止,我已将数据库规划如下:

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

我希望我的问题是有意义的(我学习数据库设计作为一个“有趣的”项目)。谢谢你,马丁

jdg4fx2g

jdg4fx2g1#

你可以用一张新table代替 tbl_room_sensortype_measurementtype 在房间和下面的传感器之间Map,

tbl_sensor_room = id, room_id, sensortype_id

这里每个传感器都有一个独特的 id 尽管房间和传感器类型相同。此表以后可以与 tbl_sensortype_measurementtype 在sql中获取度量类型。 instance 在唯一性方面成为冗余列,因为它已经被 id . 可以使用 id 无条件地达到任何期望的结果 instance . 从设计的Angular 来看,除非有sql查询可以从直接查询的速度方面受益 instance 像查询房间的第一个示例之类的列,不需要它。

相关问题