본문으로 바로 가기

MyEMS 데이터베이스 설계 문서

본 문서는 프로그래머를 대상으로 MyEMS 에너지 관리 시스템의 데이터베이스 아키텍처, 테이블 구조 및 설계 철학에 대해 상세히 설명합니다.

목차


데이터베이스 아키텍처 설계

설계 개념

  1. 데이터 분리: 데이터 유형과 사용 목적에 따라 데이터를 다른 데이터베이스로 분리하여 단일 데이터베이스가 과도하게 커지는 것을 방지합니다.
  2. 읽기/쓰기 분리: 과거 데이터를 시계열 형식으로 저장하여 효율적인 쿼리를 가능하게 합니다.
  3. 수평적 확장: 대규모 데이터베이스(historical_db, energy_db)는 독립적으로 확장할 수 있습니다.
  4. 통일된 표준: 모든 데이터베이스는 동일한 문자 집합과 정렬 규칙을 사용합니다.

데이터베이스 구성

모든 데이터베이스는 다음 구성을 통일하여 사용합니다:

  • 문자 집합: utf8mb4 (이모지를 포함한 완전한 UTF-8 문자 집합 지원)
  • 정렬 규칙: utf8mb4_unicode_ci (유니코드 정렬 규칙)
  • 저장 엔진: InnoDB (기본값, 트랜잭션 및 외래 키 지원)

명명 규칙

  • 데이터베이스 명명: myems_{기능}_db (소문자, 언더바 구분)
  • 테이블 명명: tbl_{엔티티명} (소문자, 언더바 구분)
  • 필드 명명: 소문자, 언더바 구분 (예: start_datetime_utc)
  • 인덱스 명명: tbl_{테이블명}_index_{순번}

데이터베이스 상세 설명

1. Myems_system_db (시스템 구성 데이터베이스)

목적: 시스템의 기본 구성 및 메타데이터를 저장하며, 전체 시스템의 핵심 구성 라이브러리 역할을 합니다.

특징:

  • 가장 많은 테이블을 포함함 (약 150개 이상)
  • 데이터 양은 상대적으로 적지만 구조가 복잡함
  • 다수의 연관 테이블을 포함함

주요 테이블 분류:

1.1 기본 구성 테이블

테이블명설명주요 필드
tbl_energy_categories에너지 분류 (전기, 수도, 가스, 냉방, 난방 등)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_items에너지 소비 하위 항목 (조명, 에어컨, 동력 등)id, name, energy_category_id
tbl_cost_centers비용 센터id, name, external_id
tbl_data_sources데이터 소스 구성id, name, gateway_id, protocol, connection
tbl_protocols프로토콜 구성id, name, protocol_type

1.2 설비 관리 테이블

테이블명설명주요 필드
tbl_equipments설비 정보id, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipments복합 설비 (다수의 설비 조합)id, name, is_input_counted, is_output_counted
tbl_meters계량기 정보id, name, uuid, energy_category_id, is_counted
tbl_offline_meters오프라인 계량기 (수동 입력)id, name, energy_category_id
tbl_virtual_meters가상 계량기 (계산 기반)id, name, expression (JSON 형식)
tbl_points데이터 포인트 정보id, name, data_source_id, object_type, object_id

1.3 공간 조직 테이블

테이블명설명주요 필드
tbl_spaces공간 정보 (방, 층 등)id, name, uuid, parent_space_id, area
tbl_stores점포 정보id, name, uuid, space_id
tbl_tenants테넌트 정보id, name, uuid, space_id
tbl_shopfloors작업장 정보id, name, uuid, space_id

1.4 연관 관계 테이블

시스템은 많은 대 많은 관계를 설정하기 위해 다수의 연관 테이블을 사용합니다:

  • tbl_equipments_meters: 설비와 계량기의 연관 관계
  • tbl_equipments_offline_meters: 설비와 오프라인 계량기의 연관 관계
  • tbl_equipments_virtual_meters: 설비와 가상 계량기의 연관 관계
  • tbl_spaces_equipments: 공간과 설비의 연관 관계
  • tbl_spaces_meters: 공간과 계량기의 연관 관계
  • tbl_combined_equipments_equipments: 복합 설비와 설비의 연관 관계
  • 기타...

1.5 신재생 에너지 설비 목록

테이블명설명주요 필드
tbl_photovoltaic_power_stations태양광 발전소id, name, capacity, contact_id
tbl_energy_storage_containers에너지 저장 컨테이너id, name, rated_capacity, rated_power
tbl_energy_storage_power_stations에너지 저장 발전소id, name, rated_capacity
tbl_microgrids마이크로그리드id, name, address
tbl_charging_stations충전소id, name, rated_capacity, rated_power

1.6 제어 및 스케줄링 테이블

테이블명설명주요 필드
tbl_commands제어 명령id, name, topic, payload (JSON 형식)
tbl_control_modes제어 모드id, name, is_active
tbl_control_modes_times제어 모드 시간대id, control_mode_id, start_time_of_day, end_time_of_day

1.7 기타 구성 테이블

  • tbl_contacts: 연락처 정보
  • tbl_distribution_systems: 배전 시스템
  • tbl_distribution_circuits: 배전 회로
  • tbl_energy_flow_diagrams: 에너지 흐름도
  • tbl_tariffs: 전기 요금 구성
  • tbl_working_calendars: 작업 달력
  • tbl_web_messages: 웹 메시지

개발 주의사항:

  • 모든 테이블은 기본 키로 id (BIGINT AUTO-INCREMENT)를 가집니다.
  • 대부분의 테이블은 외부 시스템 연동을 위해 uuid (CHAR(36)) 필드를 가집니다.
  • 연관 테이블은 일반적으로 id와 두 개의 외래 키 필드만 가집니다.
  • JSON 필드는 형식화된 JSON 문자열을 저장하기 위해 LONGTEXT 타입을 사용합니다.

2. Myems_historics_db (역사 데이터베이스)

목적: 실시간 모니터링 데이터 및 역사 데이터를 저장하며, 시스템 데이터 양 측면에서 가장 큰 데이터베이스 중 하나입니다.

특징:

  • 데이터 양이 방대하며 시계열 저장 방식을 사용합니다.
  • 원시 데이터 및 최신 값 캐시 테이블을 포함합니다.
  • 데이터 품질 라벨링을 지원합니다 (is_bad, is_published).

주요 테이블 구조:

테이블명설명주요 필드인덱스 전략
tbl_analog_value아날로그 역사 데이터point_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latest최신 아날로그 값 (캐시)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_value디지털 역사 데이터point_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latest최신 디지털 값 (캐시)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_value에너지 소비 역사 데이터point_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latest최신 에너지 소비 값 (캐시)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_value텍스트 값 역사 데이터point_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latest최신 텍스트 값 (캐시)point_id, utc_date_time, actual_value(point_id, utc_date_time)

파일 저장 테이블:

테이블명설명주요 필드
tbl_cost_files비용 문서 (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_files오프라인 계량기 데이터 파일file_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_files데이터 수정 파일file_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_files에너지 소비 계획 문서file_name, uuid, upload_datetime_utc, status, file_object

데이터 타입 설명:

  • actual_value: DECIMAL(21,6) - 6자리 소수점을 지원하는 고정밀 수치
  • utc_date_time: DATETIME - UTC 시간 (모든 시간은 UTC로 통일)
  • is_bad: BOOL - 데이터 품질 라벨 (True는 불량 데이터 의미)
  • is_published: BOOL - 발행 플래그 (True는 발행 완료 의미)

개발 주의사항:

  • 모든 시간 필드는 UTC 시간을 사용하며, 프론트엔드 표시 시 현지 시간으로 변환합니다.
  • _latest 테이블은 최신 값을 빠르게 쿼리하기 위해 사용되며, 역사 테이블 스캔을 피합니다.
  • 파일 테이블은 바이너리 파일 저장을 위해 LONGBLOB을 사용하므로 크기 제한에 주의합니다.
  • 성능에 영향을 주는 테이블 과다 확장을 방지하기 위해 역사 데이터를 정기적으로 정리합니다.

3. Myems_energy_db (에너지 소비 데이터베이스)

목적: 각종 설비의 에너지 소비 통계를 저장하며, 시간별/일별/월별/년별로 집계합니다.

특징:

  • 데이터는 myems-aggregation 서비스에 의해 계산 및 생성됩니다.
  • 시간 단위별로 시간/일/월/년 테이블로 분류됩니다.
  • 에너지 분류 및 에너지 소비 항목별 통계를 지원합니다.

테이블 명명 규칙:

  • tbl_{객체 타입}_{방향}_{분류}_{시간 단위}
  • 객체 타입: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • 방향: input(입력), output(출력)
  • 분류: category (에너지 분류), item (에너지 소비 하위 항목)
  • 시간 단위: hourly, daily, monthly, yearly

주요 테이블 구조:

3.1 에너지 소비 계량기 테이블

테이블명설명주요 필드
tbl_meter_hourly계량기 시간별 에너지 소비meter_id, start_datetime_utc, actual_value
tbl_meter_daily계량기 일별 에너지 소비meter_id, start_datetime_utc, actual_value
tbl_meter_monthly계량기 월별 에너지 소비meter_id, start_datetime_utc, actual_value
tbl_meter_yearly계량기 년별 에너지 소비meter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourly오프라인 계량기 시간별 에너지 소비offline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourly가상 계량기 시간별 에너지 소비virtual_meter_id, start_datetime_utc, actual_value

3.2 설비 에너지 소비 테이블

테이블명설명주요 필드
tbl_equipment_input_category_hourly설비 입력 에너지 소비 (분류별)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourly설비 입력 에너지 소비 (항목별)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourly설비 출력 에너지 소비 (분류별)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourly복합 설비 입력 에너지 소비 (분류별)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourly복합 설비 출력 에너지 소비 (분류별)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 공간 에너지 소비 테이블

테이블명설명주요 필드
tbl_space_input_category_hourly공간 입력 에너지 소비 (분류별)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourly공간 입력 에너지 소비 (항목별)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourly공간 출력 에너지 소비 (분류별)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourly점포 입력 에너지 소비store_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourly테넌트 입력 에너지 소비tenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourly작업장 입력 에너지 소비shopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 신재생 에너지 설비 에너지 소비 테이블

테이블명설명주요 필드
tbl_photovoltaic_power_station_hourly태양광 발전소 시간별 발전량photovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourly에너지 저장 컨테이너 충전 용량energy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourly에너지 저장 컨테이너 방전 용량energy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourly에너지 저장 컨테이너 전력 구매energy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourly에너지 저장 컨테이너 전력 판매energy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourly마이크로그리드 충전 용량microgrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourly마이크로그리드 방전 용량microgrid_id, start_datetime_utc, actual_value

인덱스 설계:

  • 모든 테이블은 복합 인덱스를 가집니다: (객체 ID, 분류 ID, start_datetime_utc) 또는 (객체 ID, start_datetime_utc)
  • 객체 및 시간 범위별 빠른 쿼리를 지원합니다.

개발 주의사항:

  • start_datetime_utc는 시간대의 시작 시간을 의미합니다 (예: 2024-01-01 00:00:00은 1월 1일 0시부터 1시까지를 의미).
  • actual_value는 집계 값으로, 원본 값이 아닙니다.
  • 데이터는 집계 서비스에 의해 주기적으로 계산되며, 실시간으로 작성되지 않습니다.
  • 쿼리 시 시간대 변환에 주의해야 합니다.

4. myems_billing_db (청구 데이터베이스)

목적: 청구 관련 에너지 소비 데이터를 저장합니다. 구조는 myems_energy_db와 유사하지만, 데이터는 전기 요금을 기반으로 계산됩니다.

특징:

  • 테이블 구조는 myems_energy_db와 동일합니다.
  • 데이터는 myems-aggregation 서비스에 의해 요금 구성을 사용하여 계산됩니다.
  • 시간대별 요금, 단계별 가격 등 복잡한 청구 규칙을 지원합니다.

주요 테이블:

  • myems_energy_db와 동일한 테이블 구조
  • 데이터 값은 해당 요금을 곱한 값으로, 일반적으로 통화 단위 (예: CNY, USD)로 표시됩니다.

개발 주의사항:

  • 청구 데이터는 myems_system_db.tbl_tariffs의 요금 구성에 의존합니다.
  • 비용 센터(cost_center)와 반드시 연관되어야 합니다.
  • 다중 요금 전략 (시간대별, 단계별, 용량 기반 등)을 지원합니다.

5. myems_carbon_db (탄소 배출 데이터베이스)

목적: 탄소 발자국 계산을 위한 탄소 배출 관련 에너지 데이터를 저장합니다.

특징:

  • 테이블 구조는 myems_energy_db와 동일합니다.
  • 데이터는 myems-aggregation 서비스에 의해 탄소 배출 계수를 기반으로 계산됩니다.
  • 탄소 배출 계수는 myems_system_db.tbl_energy_categories.kgco2e에 저장됩니다.

주요 테이블:

  • myems_energy_db와 동일한 테이블 구조
  • 데이터 값은 탄소 배출 계수를 곱한 값으로, 일반적으로 kgCO2e (이산화탄소 당량 킬로그램) 단위로 표시됩니다.

개발 주의사항:

  • 탄소 배출 계수는 시간에 따라 변경될 수 있으므로 과거 계수를 지원해야 합니다.
  • 전기, 가스, 석유 등 다른 에너지 유형은 다른 배출 계수를 가집니다.
  • Scope 1, Scope 2, Scope 3 탄소 배출 계산을 지원합니다.

6. myems_energy_baseline_db (에너지 기준선 데이터베이스)

목적: 에너지 절약 분석 및 에너지 효율 평가를 위한 에너지 기준선 데이터를 저장합니다.

특징:

  • 테이블 구조는 myems_energy_db와 유사합니다.
  • 기준선 데이터는 일반적으로 과거 데이터 또는 표준 값을 기반으로 계산됩니다.
  • 실제 에너지 소비와 기준선 소비를 비교하여 에너지 절약량을 계산하는 데 사용됩니다.

주요 테이블:

  • myems_energy_db와 동일한 테이블 구조
  • 실제 값 대신 기준선 값을 저장합니다.

개발 주의사항:

  • 기준선 데이터는 정기적으로 업데이트해야 합니다.
  • 다중 기준선 계산 방법 (과거 평균, 회귀 분석, 표준 값 등)을 지원합니다.

7. Myems_energy_model_db (에너지 소비 모델 데이터베이스)

목적: 연간 8760시간 에너지 소비 모델 데이터 (연간 8760시간)를 저장합니다.

특징:

  • 각 객체는 8760개의 레코드를 저장합니다 (1년간의 시간별 데이터).
  • 에너지 소비 예측 및 계획에 사용됩니다.
  • 테이블명은 _8760 접미사를 포함합니다.

주요 테이블:

테이블명설명주요 필드
tbl_meter_8760계량기 8760시간 모델meter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760설비 입력 에너지 소비 모델equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760복합 설비 입력 에너지 소비 모델combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760공간 입력 에너지 소비 모델space_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760작업장 입력 에너지 소비 모델shopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760점포 입력 에너지 소비 모델store_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760테넌트 입력 에너지 소비 모델tenant_id, energy_category_id, start_datetime_utc, actual_value

개발 주의사항:

  • 8760시간 모델은 일반적으로 과거 데이터 또는 표준 모델을 기반으로 생성됩니다.
  • 연간 에너지 소비 예측 및 예산 편성에 사용됩니다.
  • 주, 월, 분기 등 차원별 조회를 지원합니다.

8. myems_energy_plan_db (에너지 계획 데이터베이스)

목적: 에너지 계획 및 목표 데이터를 저장합니다.

특징:

  • 테이블 구조는 myems_energy_db와 유사합니다.
  • 실제 값 대신 계획 값을 저장합니다.
  • 에너지 소비 예산 및 목표 관리에 사용됩니다.

주요 테이블:

  • myems_energy_db와 동일한 테이블 구조
  • 데이터는 계획 파일 또는 수동 입력으로부터 유래합니다.

개발 주의사항:

  • 계획 데이터는 실제 데이터와 비교 분석해야 합니다.
  • 다단계 계획 (연간, 월간, 주간 등)을 지원합니다.

9. myems_energy_prediction_db (에너지 예측 데이터베이스)

목적: 에너지 소비 예측 데이터를 저장합니다.

특징:

  • 테이블 구조는 myems_energy_db와 유사합니다.
  • 실제 값 대신 예측 값을 저장합니다.
  • 에너지 소비 예측 및 경고에 사용됩니다.

주요 테이블:

  • myems_energy_db와 동일한 테이블 구조
  • 데이터는 예측 알고리즘에 의해 생성됩니다.

개발 주의사항:

  • 예측 데이터는 정기적으로 업데이트해야 합니다.
  • 다중 예측 알고리즘 (시계열, 기계 학습 등)을 지원합니다.
  • 예측 정확도는 지속적으로 최적화해야 합니다.

10. Myems_fdd_db (고장 진단 데이터베이스)

목적: 고장 감지 및 진단 관련 데이터를 저장합니다.

특징:

  • 다중 알림 채널 (웹, 이메일, SMS, 위챗, 전화)을 지원합니다.
  • 규칙 엔진은 복잡한 고장 감지 로직을 지원합니다.
  • 고장 메시지의 확인 및 처리 기능을 지원합니다.

주요 테이블 구조:

테이블명설명주요 필드
tbl_rules진단 규칙id, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messages웹 메시지id, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messages이메일 메시지id, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxSMS 발신함id, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxSMS 수신함id, sender_mobile, message, status
tbl_wechat_messages_outbox위챗 메시지 발신함id, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inbox위챗 메시지 수신함id, sender_openid, message, status
tbl_email_servers이메일 서버 구성id, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configs위챗 구성id, api_server, app_id, app_secret, access_token, expires_datetime_utc

규칙 분류 (category):

  • REALTIME: 실시간 알람
  • SYSTEM: 시스템 알람
  • SPACE: 공간 알람
  • METER: 계량기 알람
  • TENANT: 테넌트 알람
  • STORE: 점포 알람
  • SHOPFLOOR: 작업장 알람
  • EQUIPMENT: 설비 알람
  • COMBINEDEQUIPMENT: 복합 설비 알람

우선순위 (priority):

  • CRITICAL: 치명적
  • HIGH: 높음
  • MEDIUM: 중간
  • LOW: 낮음

개발 주의사항:

  • expression 필드는 JSON 형식의 규칙 표현식을 저장합니다.
  • message_template는 변수 치환을 지원합니다 (예: $name, $value).
  • 규칙은 예약 실행 및 즉시 실행을 모두 지원합니다.
  • 메시지 상태: newsentacknowledged / timeout

11. myems_user_db (사용자 데이터베이스)

목적: 사용자 인증, API 키, 이메일 메시지 등을 저장합니다.

특징:

  • 데이터 양이 적지만 보안 요구사항이 높습니다.
  • 사용자 권한 관리를 지원합니다.
  • API 키 인증을 지원합니다.

주요 테이블 구조:

테이블명설명주요 필드
tbl_users사용자 정보id, name, uuid, display_name, email, salt, password, is_admin, is_read_only, privilege_id, account_expiration_datetime_utc, password_expiration_datetime_utc, failed_login_count
tbl_privileges권한 구성id, name, data (JSON 형식)
tbl_sessions사용자 세션id, user_uuid, token, utc_expires
tbl_api_keysAPI 키id, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messages이메일 메시지id, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessions이메일 대화id, recipient_email, token, expires_datetime_utc
tbl_logs작업 로그id, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notifications알림 메시지id, user_id, created_datetime_utc, status, subject, message, url
tbl_new_users신규 사용자 (활성화 대기)id, name, uuid, display_name, email, salt, password
tbl_verification_codes인증 코드id, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

보안 설계:

  • 비밀번호는 소금값(salt) + 해시로 저장되며, 평문 저장하지 않습니다.
  • 계정 및 비밀번호 만료 시간을 지원합니다.
  • 로그인 실패 시도 제한을 지원합니다.
  • API 키는 만료 시간을 지원합니다.

개발 주의사항:

  • 비밀번호 필드는 암호화 저장해야 하며, 직접 쿼리하지 않습니다.
  • 세션 토큰은 만료된 레코드를 정기적으로 정리해야 합니다.
  • 모든 중요한 작업을 기록하여 감사할 수 있도록 작업 로그를 관리합니다.
  • 알림 상태: unreadreadarchived

12. myems_reporting_db (보고서 데이터베이스)

목적: 보고서 관련 이메일 메시지 및 첨부 파일을 저장합니다.

특징:

  • 데이터 양이 적습니다.
  • 보고서 템플릿 및 생성된 파일 저장을 지원합니다.

주요 테이블 구조:

테이블명설명주요 필드
tbl_reports보고서 구성id, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_files보고서 문서id, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_files보고서 템플릿 파일id, uuid, report_id, file_name, file_type, file_object
tbl_email_messages이메일 메시지id, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

개발 주의사항:

  • 보고서 파일은 Excel, PDF, Word 형식을 지원합니다.
  • 템플릿 파일은 보고서 생성에 사용됩니다.
  • 보고서는 예약 생성 및 즉시 생성을 모두 지원합니다.
  • 파일은 LONGBLOB을 사용하여 저장하므로 크기 제한에 주의합니다.

13. myems_production_db (생산 데이터베이스)

목적: 생산 관련 제품 데이터를 저장합니다.

특징:

  • 데이터 양이 적습니다.
  • 생산 에너지 소비 상관 분석에 사용됩니다.

주요 테이블 구조:

테이블명설명주요 필드
tbl_products제품 정보id, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teams팀 정보id, name, uuid, description
tbl_shifts교대 정보id, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourly작업장 시간별 생산량id, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourly공간 시간별 생산량id, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_products작업장과 제품 연관 관계id, shopfloor_id, product_id
tbl_shopfloors_teams작업장과 팀 연관 관계id, shopfloor_id, team_id

개발 주의사항:

  • 생산 데이터는 단위 제품 에너지 소비를 계산하는 데 사용됩니다.
  • 제품, 팀, 작업장 등 차원별 통계를 지원합니다.
  • 에너지 소비 데이터와 연관하여 에너지 효율 지표를 계산합니다.

데이터 흐름 관계

데이터 수집 프로세스

기기 / 센서
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (데이터 수집 서비스)
↓ (작성)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (데이터 정규화)
myems-normalization (정규화 서비스)
↓ (데이터 정제)
myems-cleaning (정제 서비스)
↓ (데이터 집계)
myems-aggregation (집계 서비스)
↓ (작성)
myems_energy_db (에너지 데이터)
myems_billing_db (청구 데이터)
myems_carbon_db (탄소 배출 데이터)

데이터 쿼리 흐름

사용자 요청

myems-api (API 서비스)
↓ (쿼리)
myems_system_db (구성 데이터)
myems_historical_db (역사 데이터)
myems_energy_db (에너지 데이터)
↓ (응답)
myems-web / myems-admin (프론트엔드 표시)

데이터 관계도

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (집계 계산)
myems_energy_db.tbl_meter_hourly
↓ (연결)
myems_system_db.tbl_meters
↓ (연결)
myems_system_db.tbl_equipments
↓ (연결)
myems_system_db.tbl_spaces

테이블 구조 설계 규격

공통 필드

모든 테이블은 다음 공통 필드를 포함합니다:

필드명타입설명
idBIGINT NOT NULL AUTO_INCREMENT기본 키, 자동 증가
nameVARCHAR(255)이름
uuidCHAR(36)UUID, 외부 시스템 연동에 사용
descriptionVARCHAR(255)설명 (선택 사항)

시간 필드

필드명타입설명
utc_date_timeDATETIMEUTC 시간 (역사 데이터 테이블)
start_datetime_utcDATETIME시간대 시작 시간 (집계 데이터 테이블)
created_datetime_utcDATETIME생성 시간
updated_datetime_utcDATETIME업데이트 시간
last_run_datetime_utcDATETIME최종 실행 시간
next_run_datetime_utcDATETIME다음 실행 시간

주의: 모든 시간 필드는 UTC 시간으로 통일하여 사용하며, 프론트엔드 표시 시 현지 시간으로 변환해야 합니다.

수치 필드

필드명타입설명
actual_valueDECIMAL(21, 6)실제 값, 고정밀 지원 (6자리 소수점)
set_valueDECIMAL(21, 6)설정 값
rated_capacityDECIMAL(21, 6)정격 용량
rated_powerDECIMAL(21, 6)정격 전력

JSON 필드

필드명타입설명
connectionLONGTEXT연결 구성 (JSON 형식)
expressionLONGTEXT표현식 (JSON 형식)
payloadLONGTEXT페이로드 (JSON 형식)
dataLONGTEXT데이터 (JSON 형식)

참고: JSON 필드는 형식화된 JSON 문자열을 저장하며, 사용 전 파싱해야 합니다.

상태 필드

필드명타입설명
is_enabledBOOL사용 여부
is_activeBOOL활성 상태
is_badBOOL불량 데이터 여부
is_publishedBOOL발행 여부
is_countedBOOL통계 포함 여부
statusVARCHAR(32)상태 (예: new, sent, done, error)

인덱스 설계

기본 키 인덱스:

  • 모든 테이블은 PRIMARY KEY (id)를 가집니다.

고유 인덱스:

  • 주요 필드 (예: name, uuid)는 일반적으로 고유 인덱스를 가집니다.

복합 인덱스:

  • 자주 쿼리하는 필드 조합에 대해 복합 인덱스를 설정합니다.
  • 예: (point_id, utc_date_time), (meter_id, start_datetime_utc)

시간 인덱스:

  • 시간 필드는 일반적으로 개별 인덱스를 가지며, 시간 범위 쿼리를 지원합니다.

요약

  1. MyEMS 데이터베이스는 기능별로 13개로 분리되어 있으며, 데이터 분리·읽기/쓰기 분리·수평적 확장을 핵심 설계 개념으로 합니다.
  2. 모든 데이터베이스는 utf8mb4 문자 집합과 InnoDB 엔진을 사용하며, 시간 필드는 UTC로 통일 관리합니다.
  3. 주요 데이터 흐름은 수집→정규화→정제→집계 과정을 거쳐 각 기능별 데이터베이스에 저장되며, 쿼리 시 API 서비스를 통해 프론트엔드에 제공됩니다.