MMCL/SOURCE/docs/MMCL_table_layout.md
2026-09-04 11:27:31 +09:00

154 lines
8.7 KiB
Markdown

# MMCL 데이터베이스 테이블 레이아웃 (전체 상세판)
프로젝트에 구성된 **총 9개**의 테이블 구조에 대한 상세 레이아웃 및 명세서입니다.
## ERD 요약
```mermaid
erDiagram
dev_info ||--o{ pos_info : "위치 참조 (dev_posID)"
dev_info ||--o| sensor_info : "NILM 센서 참조 (nilm_sensorNo)"
dev_info ||--o| sensor_info : "LED 센서 참조 (led_sensorNo)"
dev_info ||--|| nilm_init_value : "초기값 참조 (dev_no)"
dev_info ||--o{ ai_control_log : "AI 제어 이력 생성"
dev_info ||--o{ event_log : "이벤트/에러 로그 생성"
sensor_info ||--o{ sensor_history_log : "측정 이력 생성"
sensor_info }|--|| type_info : "센서 타입 (1:NILM, 2:경광등)"
sensor_info }o--o{ status_info : "상태코드 참조"
```
---
## 전체 테이블 상세 명세서
### 1. `dev_info` (설비/기계 마스터 정보)
NILM 장치가 연결된 설비 및 기계들의 기본 정보와, 해당 설비에 매핑된 센서 번호(NILM, LED)를 관리합니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `dev_no` | INT(11) | PK | NO | 설비 고유 번호 | Auto Increment |
| `dev_id` | VARCHAR(15) | UNIQUE | YES | 설비 식별 ID | |
| `dev_name` | VARCHAR(50) | UNIQUE | YES | 설비명 | |
| `dev_desc` | VARCHAR(100) | | YES | 설비 상세 설명 | |
| `dev_posID` | VARCHAR(100) | FK | YES | 위치 식별 ID | `pos_info.pos_id` 참조 |
| `led_sensorNo` | INT(11) | FK | YES | 매핑된 경광등(LED) 센서 번호 | `sensor_info.sensor_no` 참조 |
| `nilm_sensorNo` | INT(11) | FK | YES | 매핑된 NILM 센서 번호 | `sensor_info.sensor_no` 참조 |
| `nilm_chNo` | INT(11) | | YES | 해당 설비가 연결된 NILM 채널 번호 | |
---
### 2. `sensor_info` (센서 마스터 및 실시간/목표 상태)
NILM 장비의 최신 실시간 계측값 및 경광등의 현재/목표 상태를 관리하는 메인 테이블입니다. LLM 핸드쉐이크를 지원하기 위한 `target` 필드가 포함되어 있습니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `sensor_no` | INT(11) | PK | NO | 센서 고유 번호 | Auto Increment |
| `sensor_id` | VARCHAR(15) | UNIQUE | YES | 센서 식별 ID | |
| `sensor_name` | VARCHAR(50) | | YES | 센서명 | |
| `_desc` | VARCHAR(100) | | YES | 센서 설명 | |
| `sensor_typeid` | INT(11) | FK | NO | 센서 타입 | 1:NILM, 2:경광등 (`type_info` 참조) |
| `update_time` | DATETIME | | YES | 마지막 갱신 일시 | |
| `mqtt_topic` | VARCHAR(255) | | YES | **[NILM] 구독 MQTT 토픽** | (추가) 에이전트 동적 매핑용 |
| `value_pf` | FLOAT | | YES | [NILM] 역률 (Power Factor) | |
| `value_ch1_current` | FLOAT | | YES | [NILM] CH1 최신 전류 | |
| `value_ch1_volt` | FLOAT | | YES | [NILM] CH1 최신 전압 | |
| `value_ch1_pwr` | FLOAT | | YES | [NILM] CH1 최신 전력 | |
| `value_ch2_current` | FLOAT | | YES | [NILM] CH2 최신 전류 | |
| `value_ch2_volt` | FLOAT | | YES | [NILM] CH2 최신 전압 | |
| `value_ch2_pwr` | FLOAT | | YES | [NILM] CH2 최신 전력 | |
| `value_ch3_current` | FLOAT | | YES | [NILM] CH3 최신 전류 | |
| `value_ch3_volt` | FLOAT | | YES | [NILM] CH3 최신 전압 | |
| `value_ch3_pwr` | FLOAT | | YES | [NILM] CH3 최신 전력 | |
| `value_ch1_statusID` | INT(11) | FK | YES | [LED] Green LED **현재** 상태 | `status_info` 참조 (0:OFF, 1:ON) |
| `value_ch2_statusID` | INT(11) | FK | YES | [LED] Yellow LED **현재** 상태 | `status_info` 참조 |
| `value_ch3_statusID` | INT(11) | FK | YES | [LED] Red LED **현재** 상태 | `status_info` 참조 |
| `target_ch1_statusID` | INT(11) | FK | YES | **[LED] Green LED 목표 상태** | (추가) 백엔드/LLM 제어 지시값 |
| `target_ch2_statusID` | INT(11) | FK | YES | **[LED] Yellow LED 목표 상태** | (추가) 백엔드/LLM 제어 지시값 |
| `target_ch3_statusID` | INT(11) | FK | YES | **[LED] Red LED 목표 상태** | (추가) 백엔드/LLM 제어 지시값 |
| `last_updated_by` | VARCHAR(50)| | YES | **마지막 제어 주체** | (추가) 예: 'LLM', 'RULE_ENGINE' |
| `led_ip` | VARCHAR(20) | | YES | **[LED] 경광등 IP 주소** | (추가) 중앙 관제 에이전트 라우팅용 |
| `led_port` | INT(11) | | YES | **[LED] 경광등 포트 번호** | (추가) 기본값 20000 |
---
### 3. `sensor_history_log` (시계열 이력 로그) - **[NEW]**
`sensor_info`의 측정값이 지속적으로 갱신될 때마다 그 시점의 데이터를 시계열(Time-series) 이력으로 누적 적재하는 로그 테이블입니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `log_no` | INT(11) | PK | NO | 로그 고유 번호 | Auto Increment |
| `sensor_no` | INT(11) | FK | NO | 측정 대상 센서 고유 번호 | `sensor_info.sensor_no` 참조 |
| `log_time` | DATETIME| IDX | NO | 로그 생성 일시 | 기본값: CURRENT_TIMESTAMP |
| `value_ch1_current` | FLOAT | | YES | [NILM] CH1 이력 전류 | |
| `value_ch1_volt` | FLOAT | | YES | [NILM] CH1 이력 전압 | |
| `value_ch1_pwr` | FLOAT | | YES | [NILM] CH1 이력 전력 | |
| `value_ch2_current` | FLOAT | | YES | [NILM] CH2 이력 전류 | |
| `value_ch2_volt` | FLOAT | | YES | [NILM] CH2 이력 전압 | |
| `value_ch2_pwr` | FLOAT | | YES | [NILM] CH2 이력 전력 | |
| `value_ch3_current` | FLOAT | | YES | [NILM] CH3 이력 전류 | |
| `value_ch3_volt` | FLOAT | | YES | [NILM] CH3 이력 전압 | |
| `value_ch3_pwr` | FLOAT | | YES | [NILM] CH3 이력 전력 | |
---
### 4. `pos_info` (위치 정보 마스터)
기계/설비가 설치된 공장 내 위치 구역 코드를 관리합니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `pos_id` | VARCHAR(15) | IDX | YES | 위치 식별 ID | 예: 'POS_01' |
| `pos_name` | VARCHAR(50) | | YES | 위치명 | 예: 'A동 1구역' |
---
### 5. `type_info` (센서/장비 타입 마스터)
`sensor_info`에 등록된 센서의 유형(Type)을 정의합니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `dev_typeID` | INT(11) | IDX | YES | 장비(센서) 타입 식별 ID | 1: NILM, 2: 경광등 |
| `dev_name` | VARCHAR(50) | | YES | 장비 타입명 | |
---
### 6. `status_info` (상태 코드 마스터)
경광등 상태(ON/OFF 등)와 같은 각종 상태값의 공통 코드를 관리합니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `sts_id` | INT(11) | IDX | YES | 상태 식별 ID | 예: 0, 1 |
| `sts_name` | VARCHAR(50) | | YES | 상태명 | 예: 'OFF', 'ON' |
| `sts_level` | INT(11) | | YES | 상태 레벨 | |
---
### 7. `nilm_init_value` (NILM 초기/기준 설정값)
특정 설비(`dev_no`)에 대한 NILM 채널별 초기(기준) 전류/전압 측정값을 보관합니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `dev_no` | INT(11) | IDX | YES | 설비 고유 번호 | `dev_info.dev_no` 참조 |
| `ch1_current` | FLOAT | | YES | CH1 초기 전류값 | |
| `ch1_volt` | FLOAT | | YES | CH1 초기 전압값 | |
| `ch2_current` | FLOAT | | YES | CH2 초기 전류값 | |
| `ch2_volt` | FLOAT | | YES | CH2 초기 전압값 | |
| `ch3_current` | FLOAT | | YES | CH3 초기 전류값 | |
| `ch3_volt` | FLOAT | | YES | CH3 초기 전압값 | |
---
### 8. `ai_control_log` (AI 제어 로그)
LLM이 실행한 설비/LED 제어 이력을 기록하며, 'AI 제어 로그' 화면에 사용됩니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `log_id` | INT(11) | PK | NO | 로그 고유 번호 | Auto Increment |
| `req_text` | TEXT | | YES | 요청 자연어 | |
| `dev_no` | INT(11) | FK | NO | 제어 대상 설비 고유 번호 | `dev_info.dev_no` 참조 |
| `target_val` | VARCHAR(255)| | YES | 제어 목표/결과값 | |
| `created_at` | DATETIME | IDX | NO | 제어 실행 시각 | 기본값: CURRENT_TIMESTAMP |
---
### 9. `event_log` (알림/이벤트 로그)
설비의 에러 및 이벤트 발생/해제 이력을 기록하며, '알림(이벤트 로그)' 화면에 사용됩니다.
| 컬럼명 | 데이터 타입 | Key | NULL | 설명 | 비고 |
| --- | --- | --- | --- | --- | --- |
| `event_id` | INT(11) | PK | NO | 이벤트 고유 번호 | Auto Increment |
| `dev_no` | INT(11) | FK | NO | 발생 대상 설비 고유 번호 | `dev_info.dev_no` 참조 |
| `event_type` | VARCHAR(50) | | NO | 이벤트 유형 | 예: 'ERROR', 'WARNING', 'INFO' |
| `status` | VARCHAR(20) | | NO | 상태 | 예: '발생', '해제' |
| `occurred_at` | DATETIME | IDX | NO | 발생 시각 | 기본값: CURRENT_TIMESTAMP |
| `resolved_at` | DATETIME | | YES | 해제 시각 | |