Мнения по дизайну базы данных датчиков / чтения / предупреждений

В последнее время я задавал несколько вопросов относительно дизайна базы данных, возможно, слишком много ;-) Однако я верю, что постепенно вхожу в суть вопроса с моим дизайном и медленно довожу его до конца. . Я все еще борюсь с парой решений относительно того, как «предупреждения» хранятся в базе данных.

В этой системе предупреждение - это объект, который должен быть подтвержден, действовать и т. Д.

Изначально я связал показания для предупреждений, подобных этому (очень урезанных): -

[Location]
LocationId

[Sensor]
SensorId
LocationId
UpperLimitValue
LowerLimitValue

[SensorReading]
SensorReadingId
Value
Status
Timestamp

[SensorAlert]
SensorAlertId

[SensorAlertReading]
SensorAlertId
SensorReadingId

Последняя таблица связывает показания с предупреждением, потому что именно показания определяют, находится ли датчик в состоянии тревоги.

Проблема с этой конструкцией заключается в том, что она позволяет связывать показания многих датчиков с одним предупреждением, тогда как каждое предупреждение предназначено только для одного датчика и должен иметь только показания для этого датчика, связанного с ним (я должен беспокоиться, что БД позволяет это?).

Я подумал упростить вещи, зачем вообще возиться с таблицей SensorAlertReading? Вместо этого я мог бы сделать следующее:

[Location]
LocationId

[Sensor]
SensorId
LocationId

[SensorReading]
SensorReadingId
SensorId
Value
Status
Timestamp

[SensorAlert]
SensorAlertId
SensorId
Timestamp

[SensorAlertEnd]
SensorAlertId
Timestamp

В основном я сейчас не связываю показания с предупреждением - вместо этого я просто знаю, что предупреждение было активным между временем начала и окончания для определенного датчика, и если я хочу посмотреть показания для этого предупреждения я могу сделать.

Очевидно, обратная сторона заключается в том, что у меня больше нет ограничений, мешающих мне удалять показания, полученные во время предупреждения, но я ' Вот еще одна идея - работает по-другому. Он сохраняет каждое изменение состояния датчика, переходя от нормального к аварийному в таблице, а затем показания просто связываются с определенным состоянием. Кажется, это решает все проблемы - что ты думаешь? (единственное, в чем я не уверен, так это называть таблицу "SensorState", я не могу не думать, что есть лучшее имя (может быть, SensorReadingGroup?): -

[Location]
LocationId

[Sensor]
SensorId
LocationId

[SensorState]
SensorStateId
SensorId
Timestamp
Status
IsInAlert

[SensorReading]
SensorReadingId
SensorStateId
Value
Timestamp

Для этого должно быть элегантное решение!

6
задан Mark 2 December 2010 в 14:44
поделиться