Этот вопрос связан с другим вопросом, который я задал. В моем другом вопросе я прошу мнения людей о трех разных способах создания базы данных. Самый чистый способ, которым я могу думать об этом без (практически) повторения таблиц и странных понятий, таких как "супер таблицы", - это вариант 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). Регистратор собирает показания до тех пор, пока их не соберет позже, живые датчики мгновенно передают показания через сеть, и у них есть дополнительные атрибуты, такие как сетевые подчиненные устройства, которые имеют атрибуты сетевых адресов.. настолько сильно отличаются от регистраторов (я пытался обрабатывать регистраторы как датчики в одной точке, не получится хорошо).
Когда датчик или регистратор выходит за пределы диапазона (обозначается показанием), система генерирует предупреждение. Предупреждение относится только к этому датчику и считается активным до тех пор, пока показания для этого датчика (или регистратора) не покажут, что он находится в зоне действия. До этого времени показания, в которых датчик выходит за пределы диапазона, "привязаны" к тому же предупреждению.
Итак, как вы можете видеть, одно предупреждение должно иметь только показания для одного и того же сенсора, связанного с ним, однако мой проект выше позволяет различать показания от разных датчиков и регистраторов, связанных с одним и тем же предупреждением, - следует ли мне беспокоиться о том, что Я так не ограничил это? Другая проблема заключается в том, что он позволяет оповещения существовать без каких-либо чтений.
Отсюда мой вопрос; насколько далеко следует идти с ограничениями или сгибать дизайн в соответствии с этими ограничениями? Мне нравится дизайн выше, потому что он прост: предупреждения могут иметь показания датчиков и показания регистратора, поэтому это простое отношение, чтобы связать их.
Я не могу не думать, что мне тоже не хватает трюка - есть ли гораздо лучший способ сделать этот проект? Я крутился с ним целую вечность и всегда кажется компромиссом (если я не повторяю все таблицы предупреждений для разных типов чтения).
Спасибо.