복붙노트

[SQL] 센서 / 읽기 / 경고 데이터베이스 설계에 대한 의견

SQL

센서 / 읽기 / 경고 데이터베이스 설계에 대한 의견

난 내가 천천히 내 디자인 문제의 핵심을 얻고있다 믿습니다 그러나 ;-) 아마 너무 많은 요즘, 데이터베이스 설계에 관한 몇 가지 질문을 요청했습니다 천천히 아래로 비등하고있다. 나는 아직도 "경고"가 데이터베이스에 저장하는 방법에 관한 결정의 부부와 씨름하고있다.

이 시스템에서 경고가 작용, 인정해야하는 기업 등이다

처음에 나는 (매우 삭감)이 같은 경고에 독서 관련 : -

[Location]
LocationId

[Sensor]
SensorId
LocationId
UpperLimitValue
LowerLimitValue

[SensorReading]
SensorReadingId
Value
Status
Timestamp

[SensorAlert]
SensorAlertId

[SensorAlertReading]
SensorAlertId
SensorReadingId

이 센서가 경고 또는 아니라는 것을 지시 읽기 때문에 마지막 표는 경고와 함께 독서를 연결합니다.

각 경고는 단 하나의 센서입니다 만 (과 관련이 센서 판독 내가 DB가 허용 귀찮게해야해야한다 반면에 -이 디자인의 문제는 여러 센서로부터 측정 값은 하나의 경고와 연관 될 수 있다는 것입니다 이 생각?).

나는 일을 단순화하는 이유도 SensorAlertReading 테이블과 귀찮게 생각? 대신에 나는이 작업을 수행 할 수 있습니다 :

[Location]
LocationId

[Sensor]
SensorId
LocationId

[SensorReading]
SensorReadingId
SensorId
Value
Status
Timestamp

[SensorAlert]
SensorAlertId
SensorId
Timestamp

[SensorAlertEnd]
SensorAlertId
Timestamp

기본적으로 지금 경고와 함께 독서를 연결 아니에요 - 대신 그냥 경고가 특정 센서 시작 및 종료 시간 사이 활성화 된 것을 알고, 나는 내가 할 수있는 경고의 측정 값을보고합니다.

분명히 단점은 내가 더 이상 나에게 경고하는 동안 발생 판독을 삭제 중지 어떤 제약이 없다,하지만 난 확실히 제약이 켜지지입니다 아니에요.

이제 개발자 / DBA로 외부에서 당신이 아프게되고 싶어하거나 합리적인 것처럼 보인다 만들어 그 것이다 찾고?

아마도 내가 누락 될 수 있음을이 일을 다른 방법이 있나요?

감사.

편집하다: 여기에 또 다른 생각 - 그것은 다른 방식으로 작동합니다. 이 표에 경고 보통에서가는 각 센서의 상태 변화를 저장하고 판독은 단순히 특정 상태와 연관된다. 나중에 생각 디부 -이 모든 문제를 해결하는 것? (나는 확실히에 대한 아니에요 유일한 것은 내가 도움이되지 수있는 더 나은 이름 (어쩌면 SensorReadingGroup이 있다고 생각 테이블 "SensorState"를 호출입니다) : -

[Location]
LocationId

[Sensor]
SensorId
LocationId

[SensorState]
SensorStateId
SensorId
Timestamp
Status
IsInAlert

[SensorReading]
SensorReadingId
SensorStateId
Value
Timestamp

이에 대한 우아한 해결책이 있어야합니다!

해결법

  1. ==============================

    1.데이터 모델

    데이터 모델

    나는 당신의 데이터 모델은 다음과 같이해야한다고 생각 : ▶ 센서 데이터 모델 ◀. (2 페이지 역사를 다시 다른 질문 관련).

    관계형 모델링 표준에 익숙하지 않은 독자는 ▶ IDEF1X 표기법을 찾을 수 있습니다 ◀ 유용합니다.

    비즈니스 (해설에서 개발 된 규칙)

    내가 그들을 삭제 한 그래서, 지금은 사용되지 않는 일부 초기 비즈니스 규칙을 식별했다

    이러한 수의 관계 (데이터 모델에 인접한 읽기)의 "읽기"수 있습니다. 비즈니스 규칙 및 모든 묵시적 참고 및 데이터 무결성의 구현, 따라서 어떤 ISO SQL 데이터베이스에, 규칙, CHECK 제약 조건에 의해 보장 될 수있다. 이것은 관계형 키와 엔티티와 관계 모두의 발전에 IDEF1X의 데모입니다. 동사 문구가 더 단순한 번창보다 있습니다.

    외에도 세 개의 참조 테이블의 정적에서 확인 기관은 위치, NetworkSlave 및 사용자입니다. 나는 그것을 자신의 제목을 부여 ahve 있도록 센서, 시스템의 핵심입니다.

    위치

    NetworkSlave

    사용자

    감지기

    댓글에 대한 응답

  2. ==============================

    2.여기에 문제에 내 두 센트입니다.

    여기에 문제에 내 두 센트입니다.

    을 alertType 표는 경고의 가능한 모든 종류를 보유하고 있습니다. AlertName 높은 온대, 낮은 압력, 낮은 수위 등과 같이 할 수있다

    AlertSetup 표는 특정 경보 유형 센서로부터 경보 임계 값의 설정을 허용한다. 예를 들어, 100 TresholdLevel 판독 값 = 100 TresholdType = "HI"트리거 경고한다.

    그들이 서버 (어플리케이션)에 스트리밍 된 바와 읽기 표는 센서 판독 값을 보유하고있다.

    경고 표는 모든 경고를 보유하고 있습니다. 이 경고하고 완료 마지막 (FirstReadingId, LastReadingId)을 트리거 첫 번째 독서에 대한 링크를 유지합니다. 제 (SensorId, AlertTypeId) 조합에 대한 활성 경고가있는 경우이 isActive는 사실이다. 이 isActive은 경고 임계 값 아래로가는 읽어 false로 설정할 수 있습니다. 운영자가 경고를 인정했다 수단을 IsAcknowledged.

  3. ==============================

    3.여기에 처리해야 주요 "삼각형"센서, [센서] 읽기 및 경고입니다. 가정하면 (설계 "한 번에 모두로드"반대)이 발생하는 그대로 당신은 활동을 추적 할 필요가, 세 번째 솔루션은 우리가 최근에했던 뭔가 비슷합니다. 몇 개조하면 되겠과는 같을 것이다 :

    여기에 처리해야 주요 "삼각형"센서, [센서] 읽기 및 경고입니다. 가정하면 (설계 "한 번에 모두로드"반대)이 발생하는 그대로 당신은 활동을 추적 할 필요가, 세 번째 솔루션은 우리가 최근에했던 뭔가 비슷합니다. 몇 개조하면 되겠과는 같을 것이다 :

    [Location] 
    LocationId 
    
    [Sensor] 
    SensorId 
    LocationId 
    CurrentSensorState  --  Denormalized data!
    
    [SensorReading] 
    SensorReadingId 
    SensorState
    Value 
    Timestamp 
    
    [SensorStateLog] 
    SensorId 
    Timestamp 
    SensorState
    Status   --  Does what?
    IsInAlert 
    (Primary key is {SensorId, Timestamp})
    

    "SensorState"는 관련 조회 테이블 목록 (그리고 제약) 모든 가능한 상태로, SensorStateId 수 있습니다.

    아이디어는 센서는 센서와 쇼 그것의 현재 상태 당 하나 개의 행을 포함합니다. SensorReading는 센서 판독에 연속적으로 갱신된다. 만약 주어진 센서의 현재 상태 변경 (센서의 현재 상태에서 즉, 새로운 읽기의 상태가 달라), 현재 상태를 변경하고 상태의 변화를 보여주는 SensorStateLog에 행을 추가 할 때. (선택적으로, "종료 상태"타임 스탬프하지만 쓰기에의 까다로운 코드 있다는하여 해당 센서의 "이전"항목을 업데이트 할 수 있습니다.)

    센서 테이블에 CurrentSensorState 데이터를 비정규하지만, 경우 제대로 유지 (당신은 수백만 개의 행이있는 경우) 그것은 가치가 노력 할 수 있도록 쿼리 현재 상태가 훨씬 더 효율적으로 만들 것이다.

    모든이의 명백한 단점은 경고가 더 이상 기업이며, 그들은 그 훨씬 더 열심히 추적하고 식별 될 수 없다는 것이다. 이 쉽게 즉시 식별하고 사용할 수 있어야하는 경우, 세 번째 방식은 당신이해야 할 일을하지 않습니다.

  4. from https://stackoverflow.com/questions/4335189/opinions-on-sensor-reading-alert-database-design by cc-by-sa and MIT license