Этот вопрос связан с другим вопросом, который я задал. В моем другом вопросе я спрашиваю мнение людей о 3 разных способах создания базы данных.Самый простой способ сделать это без (практически) повторения таблиц и таких странных понятий, как «супер таблицы», - это вариант 2:
Location [Table]
- Id
- Name
- HasLogger
- LoggerRFID
- LoggerUpperLimit
- LoggerLowerLimit
Sensor [Table]
- Id [PK]
- LocationId [FK]
- UpperLimit
- LowerLimit
SensorReading [Table]
- Id [PK]
- SensorId [FK]
- Value
LoggerReading [Table]
- LocationId [FK]
- Value
Alert [Table]
- Id [PK]
AlertCorrectiveAction [Table]
- AlertId [FK]
- CorrectiveActionId [FK]
- ByUserId [FK]
AlertAcknowledgement [Table]
- AlertId [FK]
- ByUserId [FK]
SensorAlertReading [Table]
- AlertId [FK]
- SensorReadingId [FK]
LoggerAlertReading [Table]
- AlertId [FK]
- LoggerReadingId [FK]
Теперь проблема с этой опцией заключается в том, что она позволяет считывать данные с несколькихдатчики и несколько мест, которые нужно «связать» с одним оповещением.
Чтобы подробнее узнать, почему это проблема, я объясню, как работает система:
Местоположение может содержать множество «живых»датчики ", но только 1 регистратор.По этой причине я поместил атрибуты регистратора в таблицу местоположений (это было эффективное отношение 1 к 1).Регистратор собирает показания до тех пор, пока он не будет собран позже, работающие датчики немедленно передают показания через сеть, и у них есть дополнительные атрибуты, такие как сетевые ведомые устройства, которые имеют атрибуты сетевого адреса ... которые довольно сильно отличаются от регистраторов (я однажды пытался рассматривать регистраторы как датчикине работает).
Когда датчик или регистратор выходит за пределы диапазона (обозначенного показаниями), система генерирует предупреждение.Предупреждение относится только к этому датчику и считается активным до тех пор, пока показание этого датчика (или регистратора) не покажет, что он снова находится в диапазоне.До этого времени показания, которые выводят датчик за пределы диапазона, «связаны» с этим же предупреждением.
Таким образом, как вы можете видеть, одно предупреждение должно действительно иметь показания только для того же датчика,однако мой дизайн выше позволяет различным показаниям с разных датчиков и регистраторов связываться с одним и тем же предупреждением - стоит ли мне беспокоиться, что я как-то не ограничен?Другая проблема заключается в том, что он позволяет оповещениям существовать без каких-либо показаний.
Отсюда мой вопрос;насколько далеко нужно идти с ограничениями или сгибать дизайн, чтобы соответствовать этим ограничениям?Мне нравится приведенный выше дизайн, потому что он прост - оповещения могут иметь показания датчиков и показания регистратора, поэтому их просто связать.
Не могу не подумать, что мне тоже не хватает трюка - есть липросто намного лучший способ сделать этот дизайн?Я ходил кругами с ним целую вечность, и всегда есть компромисс (если я не повторю все таблицы предупреждений для разных типов чтения).
Спасибо.