Đi đến nội dung chính

Tài liệu Thiết kế Cơ sở dữ liệu MyEMS

Tài liệu này nhắm đến các lập trình viên, cung cấp giải thích chi tiết về kiến trúc cơ sở dữ liệu, cấu trúc bảng và triết lý thiết kế của hệ thống quản lý năng lượng MyEMS.

Mục lục


Thiết kế kiến trúc cơ sở dữ liệu

Triết lý thiết kế

  1. Phân tách dữ liệu: Tách dữ liệu vào các cơ sở dữ liệu khác nhau dựa trên loại dữ liệu và mục đích sử dụng để tránh một cơ sở dữ liệu duy nhất trở nên quá lớn
  2. Phân tách đọc - ghi: Dữ liệu lịch sử được lưu trữ theo định dạng chuỗi thời gian, cho phép truy vấn hiệu quả
  3. Mở rộng ngang: Các cơ sở dữ liệu lớn (historical_db, energy_db) có thể được mở rộng độc lập
  4. Tiêu chuẩn thống nhất: Tất cả các cơ sở dữ liệu sử dụng cùng bộ ký tự và quy tắc sắp xếp

Cấu hình cơ sở dữ liệu

Tất cả các cơ sở dữ liệu đều sử dụng cấu hình sau một cách thống nhất:

  • Bộ ký tự: utf8mb4 (hỗ trợ bộ ký tự UTF-8 đầy đủ, bao gồm emoji)
  • Quy tắc sắp xếp: utf8mb4_unicode_ci (quy tắc sắp xếp Unicode)
  • Cơ sở lưu trữ: InnoDB (mặc định, hỗ trợ giao dịch và khóa ngoại)

Quy tắc đặt tên

  • Đặt tên Cơ sở dữ liệu: myems_{Chức năng}_db (chữ thường, phân tách bằng gạch dưới)
  • Đặt tên Bảng: tbl_{Tên thực thể} (chữ thường, phân tách bằng gạch dưới)
  • Đặt tên Trường: Chữ thường, phân tách bằng gạch dưới, ví dụ: start_datetime_utc
  • Đặt tên Chỉ mục: tbl_{Tên Bảng}_index_{Số thứ tự}

Mô tả chi tiết cơ sở dữ liệu

1. Myems_system_db (cơ sở dữ liệu cấu hình hệ thống)

Mục đích: Lưu trữ cấu hình cơ bản và siêu dữ liệu của hệ thống, đóng vai trò là thư viện cấu hình cốt lõi của toàn bộ hệ thống.

Đặc điểm:

  • Chứa nhiều bảng nhất (khoảng 150+ bảng)
  • Khối lượng dữ liệu tương đối nhỏ, nhưng cấu trúc phức tạp
  • Chứa nhiều bảng liên kết

Phân loại Bảng chính:

1.1 Bảng Cấu hình Cơ bản

tên bảngMô tảtrường khóa
tbl_energy_categoriesPhân loại năng lượng (điện, nước, ga, lạnh, nhiệt, v.v.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsMục con tiêu thụ năng lượng (đèn chiếu sáng, điều hòa, điện, v.v.)id, name, energy_category_id
tbl_cost_centerstrung tâm chi phíid, name, external_id
tbl_data_sourcesCấu hình Nguồn dữ liệuid, name, gateway_id, protocol, connection
tbl_protocolsCấu hình Giao thứcid, name, protocol_type

1.2 Bảng Quản lý Thiết bị

tên bảngMô tảtrường khóa
tbl_equipmentsThông tin Thiết bịid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsThiết bị kết hợp (kết hợp nhiều thiết bị)id, name, is_input_counted, is_output_counted
tbl_metersthông tin Đồng hồ đoid, name, uuid, energy_category_id, is_counted
tbl_offline_metersĐồng hồ đo ngoại tuyến (nhập thủ công)id, name, energy_category_id
tbl_virtual_metersĐồng hồ ảo (Được tính toán)id, name, expression (định dạng JSON)
tbl_pointsthông tin điểm dữ liệuid, name, data_source_id, object_type, object_id

1.3 Bảng Tổ chức Không gian

tên bảngMô tảtrường khóa
tbl_spacesThông tin Không gian (phòng, tầng, v.v.)id, name, uuid, parent_space_id, area
tbl_storesThông tin Cửa hàngid, name, uuid, space_id
tbl_tenantsthông tin khách thuêid, name, uuid, space_id
tbl_shopfloorsThông tin Xưởng sản xuấtid, name, uuid, space_id

1.4 Bảng Mối quan hệ Liên kết

Hệ thống sử dụng nhiều bảng liên kết để thiết lập mối quan hệ nhiều - nhiều:

  • tbl_equipments_meters: Liên kết giữa thiết bị và đồng hồ đo
  • tbl_equipments_offline_meters: Liên kết giữa thiết bị và đồng hồ đo ngoại tuyến
  • tbl_equipments_virtual_meters: Liên kết giữa thiết bị và đồng hồ ảo
  • tbl_spaces_equipments: Liên kết giữa không gian và thiết bị
  • tbl_spaces_meters: Liên kết giữa không gian và đồng hồ đo
  • tbl_combined_equipments_equipments: Liên kết giữa thiết bị kết hợp và thiết bị
  • v.v...

1.5 Danh sách Bảng Thiết bị Năng lượng Mới

tên bảngMô tảtrường khóa
tbl_photovoltaic_power_stationstrạm năng lượng mặt trờiid, name, capacity, contact_id
tbl_energy_storage_containersBình lưu trữ năng lượngid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationstrạm lưu trữ năng lượngid, name, rated_capacity
tbl_microgridslưới vi môid, name, address
tbl_charging_stationstrạm sạcid, name, rated_capacity, rated_power

1.6 Bảng Điều khiển và Lập lịch

tên bảngMô tảtrường khóa
tbl_commandslệnh điều khiểnid, name, topic, payload (định dạng JSON)
tbl_control_modeschế độ điều khiểnid, name, is_active
tbl_control_modes_timesKhoảng thời gian chế độ điều khiểnid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Bảng Cấu hình Khác

  • tbl_contacts: Thông tin Liên hệ
  • tbl_distribution_systems: Hệ thống phân phối
  • tbl_distribution_circuits: Mạch phân phối
  • tbl_energy_flow_diagrams: Sơ đồ luồng năng lượng
  • tbl_tariffs: Cấu hình giá điện
  • tbl_working_calendars: Lịch làm việc
  • tbl_web_messages: Tin nhắn Web

Lưu ý phát triển:

  • Tất cả các bảng đều có id (BIGINT AUTO-INCREMENT) làm khóa chính
  • Hầu hết các bảng có trường uuid (CHAR(36)) cho tích hợp hệ thống bên ngoài
  • Bảng liên kết thường chỉ có id và hai trường khóa ngoại
  • Trường JSON sử dụng kiểu LONGTEXT để lưu trữ chuỗi JSON định dạng

2. Myems_historics_db (Cơ sở dữ liệu Dữ liệu Lịch sử)

Mục đích: Lưu trữ dữ liệu giám sát thời gian thực và dữ liệu lịch sử, là một trong những cơ sở dữ liệu có khối lượng dữ liệu lớn nhất trong hệ thống.

Đặc điểm:

  • Khối lượng dữ liệu khổng lồ, sử dụng lưu trữ chuỗi thời gian
  • Chứa dữ liệu thô và bảng cache giá trị mới nhất
  • Hỗ trợ đánh dấu chất lượng dữ liệu (is_bad, is_published)

Cấu trúc Bảng chính:

tên bảngMô tảtrường khóaChiến lược Chỉ mục
tbl_analog_valueDữ liệu lịch sử giá trị tương tựpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestGiá trị tương tự mới nhất (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueDữ liệu lịch sử giá trị sốpoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestGiá trị số mới nhất (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueDữ liệu lịch sử tiêu thụ năng lượngpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestGiá trị tiêu thụ năng lượng mới nhất (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueDữ liệu lịch sử giá trị văn bảnpoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestGiá trị văn bản mới nhất (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Bảng Lưu trữ Tệp:

tên bảngMô tảtrường khóa
tbl_cost_filesTài liệu Chi phí (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesTệp dữ liệu đồng hồ đo ngoại tuyếnfile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesTệp sửa chữa dữ liệufile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesTài liệu kế hoạch tiêu thụ năng lượngfile_name, uuid, upload_datetime_utc, status, file_object

Mô tả Kiểu dữ liệu:

  • actual_value: DECIMAL(21,6) - Hỗ trợ giá trị số độ chính xác cao với 6 chữ số thập phân
  • utc_date_time: DATETIME - Thời gian UTC, tất cả các thời gian đều sử dụng UTC một cách thống nhất
  • is_bad: BOOL - Đánh dấu Chất lượng dữ liệu, True chỉ dữ liệu lỗi
  • is_published: BOOL - cờ công bố, True chỉ đã công bố

Lưu ý phát triển:

  • Tất cả các trường thời gian đều sử dụng thời gian UTC, hiển thị phía frontend được chuyển đổi sang thời gian địa phương
  • Bảng _latest được sử dụng để truy vấn nhanh giá trị mới nhất, tránh quét các bảng lịch sử
  • Bảng tệp sử dụng LONGBLOB để lưu trữ tệp nhị phân, lưu ý giới hạn kích thước
  • Định kỳ dọn dẹp dữ liệu lịch sử để tránh các bảng quá lớn ảnh hưởng đến hiệu suất

3. Myems_energy_db (cơ sở dữ liệu tiêu thụ năng lượng)

Mục đích: Lưu trữ số liệu thống kê tiêu thụ năng lượng của các thiết bị khác nhau và tổng hợp theo giờ, ngày, tháng và năm.

Đặc điểm:

  • Dữ liệu được tính toán và tạo ra bởi dịch vụ myems-aggregation
  • Được chia theo mức độ chi tiết thời gian thành các bảng hàng giờ, hàng ngày, hàng tháng và hàng năm
  • Hỗ trợ thống kê theo danh mục năng lượng và mục tiêu thụ năng lượng

Quy tắc Đặt tên Bảng:

  • tbl_{Loại Đối tượng}_{Hướng}_{Phân loại}_{Mức độ chi tiết Thời gian}
  • Loại đối tượng: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • Hướng: input(nhập), output(xuất)
  • Phân loại: category (danh mục năng lượng), item (mục con tiêu thụ năng lượng)
  • Mức độ chi tiết thời gian: hourly, daily, monthly, yearly

Cấu trúc Bảng chính:

3.1 Bảng đồng hồ đo tiêu thụ năng lượng

tên bảngMô tảtrường khóa
tbl_meter_hourlyTiêu thụ năng lượng hàng giờ của đồng hồ đometer_id, start_datetime_utc, actual_value
tbl_meter_dailyTiêu thụ năng lượng hàng ngày của đồng hồ đometer_id, start_datetime_utc, actual_value
tbl_meter_monthlyTiêu thụ năng lượng hàng tháng của đồng hồ đometer_id, start_datetime_utc, actual_value
tbl_meter_yearlyTiêu thụ năng lượng hàng năm của đồng hồ đometer_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyTiêu thụ năng lượng hàng giờ của đồng hồ đo ngoại tuyếnoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyTiêu thụ năng lượng hàng giờ của đồng hồ ảovirtual_meter_id, start_datetime_utc, actual_value

3.2 Bảng Tiêu thụ Năng lượng Thiết bị

tên bảngMô tảtrường khóa
tbl_equipment_input_category_hourlyTiêu thụ năng lượng đầu vào Thiết bị (theo danh mục)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyTiêu thụ năng lượng đầu vào Thiết bị (theo mục)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyTiêu thụ năng lượng đầu ra Thiết bị (theo danh mục)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyTiêu thụ năng lượng đầu vào Thiết bị kết hợp (theo danh mục)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyTiêu thụ năng lượng đầu ra Thiết bị kết hợp (theo phân loại)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Bảng Tiêu thụ Năng lượng Không gian

tên bảngMô tảtrường khóa
tbl_space_input_category_hourlyTiêu thụ năng lượng đầu vào Không gian (theo danh mục)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyTiêu thụ năng lượng đầu vào Không gian (theo mục)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyTiêu thụ năng lượng đầu ra Không gian (theo phân loại)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyTiêu thụ năng lượng đầu vào Cửa hàngstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyKhách thuê nhập tiêu thụ năng lượngtenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyTiêu thụ năng lượng đầu vào Xưởng sản xuấtshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Bảng Tiêu thụ Năng lượng Thiết bị Năng lượng Mới

tên bảngMô tảtrường khóa
tbl_photovoltaic_power_station_hourlyLượng điện sản xuất hàng giờ của trạm năng lượng mặt trờiphotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyDung lượng sạc của bình lưu trữ năng lượngenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyDung lượng xả của bình lưu trữ năng lượngenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyBình lưu trữ năng lượng mua điệnenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyBình lưu trữ năng lượng bán điệnenergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyDung lượng sạc của lưới vi mômicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyDung lượng xả của lưới vi mômicrogrid_id, start_datetime_utc, actual_value

Thiết kế Chỉ mục:

  • Tất cả các bảng đều có chỉ mục kết hợp: (ID Đối tượng, ID Phân loại, start_datetime_utc) hoặc (ID Đối tượng, start_datetime_utc)
  • Hỗ trợ truy vấn nhanh theo đối tượng và khoảng thời gian

Lưu ý phát triển:

  • start_datetime_utc biểu thị thời gian bắt đầu của khoảng thời gian (ví dụ: 01/01/2024 00:00:00 biểu thị từ 0:00 đến 1:00 ngày 1 tháng 1)
  • actual_value là giá trị tổng hợp, không phải giá trị gốc
  • Dữ liệu được dịch vụ tổng hợp tính toán định kỳ, không được ghi theo thời gian thực
  • Lưu ý chuyển đổi múi giờ khi truy vấn

4. myems_billing_db (Cơ sở dữ liệu Thanh toán)

Mục đích: Lưu trữ dữ liệu tiêu thụ năng lượng liên quan đến thanh toán. Cấu trúc của nó tương tự như myems_energy_db, nhưng dữ liệu được tính toán dựa trên giá điện.

Đặc điểm:

  • Cấu trúc bảng giống hệt myems_energy_db
  • Dữ liệu được dịch vụ myems-aggregation tính toán bằng cách sử dụng cấu hình giá điện
  • Hỗ trợ các quy tắc thanh toán phức tạp như giá điện theo giờ sử dụng và giá theo tầng

Bảng chính:

  • Cấu trúc bảng giống hệt myems_energy_db
  • Giá trị dữ liệu được nhân với giá điện tương ứng, thường bằng đơn vị tiền tệ (ví dụ: CNY, USD)

Lưu ý Phát triển:

  • Dữ liệu thanh toán phụ thuộc vào cấu hình giá điện trong myems_system_db.tbl_tariffs
  • Phải liên kết với các trung tâm chi phí (cost_center)
  • Hỗ trợ nhiều chiến lược giá điện (theo giờ sử dụng, theo tầng, dựa trên dung lượng, v.v.)

5. myems_carbon_db (Cơ sở dữ liệu Phát thải Carbon)

Mục đích: Lưu trữ dữ liệu năng lượng liên quan đến phát thải carbon cho việc tính toán dấu chân carbon.

Đặc điểm:

  • Cấu trúc bảng giống hệt myems_energy_db
  • Dữ liệu được dịch vụ myems-aggregation tính toán dựa trên hệ số phát thải carbon
  • Hệ số phát thải carbon được lưu trữ trong myems_system_db.tbl_energy_categories.kgco2e

Bảng chính:

  • Cấu trúc bảng giống hệt myems_energy_db
  • Giá trị dữ liệu được nhân với hệ số phát thải carbon, thường tính bằng kgCO2e (kilogram tương đương CO₂)

Lưu ý Phát triển:

  • Hệ số phát thải carbon có thể thay đổi theo thời gian, do đó phải hỗ trợ các hệ số lịch sử
  • Các loại năng lượng khác nhau (điện, ga, dầu, v.v.) có các hệ số phát thải khác nhau
  • Hỗ trợ tính toán phát thải carbon Phạm vi 1, Phạm vi 2 và Phạm vi 3

6. myems_energy_baseline_db (Cơ sở dữ liệu Đường cơ sở Năng lượng)

Mục đích: Lưu trữ dữ liệu đường cơ sở năng lượng cho phân tích tiết kiệm năng lượng và đánh giá hiệu quả năng lượng.

Đặc điểm:

  • Cấu trúc bảng tương tự như myems_energy_db
  • Dữ liệu đường cơ sở thường được tính toán dựa trên dữ liệu lịch sử hoặc giá trị tiêu chuẩn
  • Được sử dụng để so sánh tiêu thụ năng lượng thực tế với tiêu thụ đường cơ sở để tính toán tiết kiệm năng lượng

Bảng chính:

  • Cấu trúc bảng giống hệt myems_energy_db
  • Lưu trữ giá trị đường cơ sở thay vì giá trị thực tế

Lưu ý Phát triển:

  • Dữ liệu đường cơ sở cần được cập nhật định kỳ
  • Hỗ trợ nhiều phương pháp tính toán đường cơ sở (trung bình lịch sử, phân tích hồi quy, giá trị tiêu chuẩn, v.v.)

7. Myems_energy_model_db (cơ sở dữ liệu mô hình tiêu thụ năng lượng)

Mục đích: Lưu trữ dữ liệu mô hình tiêu thụ năng lượng 8760 giờ hàng năm (8760 giờ mỗi năm).

Đặc điểm:

  • Mỗi đối tượng lưu trữ 8760 bản ghi (dữ liệu hàng giờ trong một năm)
  • Được sử dụng để dự báo và lập kế hoạch tiêu thụ năng lượng
  • Tên bảng chứa hậu tố _8760

Bảng chính:

tên bảngMô tảtrường khóa
tbl_meter_8760Mô hình 8760 giờ của đồng hồ đometer_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Mô hình tiêu thụ năng lượng đầu vào Thiết bịequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Mô hình tiêu thụ năng lượng đầu vào Thiết bị kết hợpcombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Mô hình tiêu thụ năng lượng đầu vào Không gianspace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Mô hình tiêu thụ năng lượng đầu vào Xưởng sản xuấtshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Mô hình tiêu thụ năng lượng đầu vào Cửa hàngstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Mô hình tiêu thụ năng lượng đầu vào Khách thuêtenant_id, energy_category_id, start_datetime_utc, actual_value

Lưu ý phát triển:

  • Mô hình 8760 giờ thường được tạo ra dựa trên dữ liệu lịch sử hoặc mô hình tiêu chuẩn
  • Được sử dụng để dự báo tiêu thụ năng lượng hàng năm và lập ngân sách
  • Hỗ trợ xem theo các chiều như tuần, tháng, quý, v.v.

8. myems_energy_plan_db (Cơ sở dữ liệu Kế hoạch Năng lượng)

Mục đích: Lưu trữ dữ liệu kế hoạch và mục tiêu năng lượng.

Đặc điểm:

  • Cấu trúc bảng tương tự như myems_energy_db
  • Lưu trữ giá trị kế hoạch thay vì giá trị thực tế
  • Được sử dụng cho lập ngân sách tiêu thụ năng lượng và quản lý mục tiêu

Bảng chính:

  • Cấu trúc bảng giống hệt myems_energy_db
  • Dữ liệu đến từ các tệp kế hoạch hoặc nhập thủ công

Lưu ý Phát triển:

  • Dữ liệu kế hoạch cần được so sánh với dữ liệu thực tế để phân tích
  • Hỗ trợ các kế hoạch nhiều cấp (hàng năm, hàng tháng, hàng tuần, v.v.)

9. myems_energy_prediction_db (Cơ sở dữ liệu Dự báo Năng lượng)

Mục đích: Lưu trữ dữ liệu dự báo tiêu thụ năng lượng.

Đặc điểm:

  • Cấu trúc bảng tương tự như myems_energy_db
  • Lưu trữ giá trị dự báo thay vì giá trị thực tế
  • Được sử dụng để dự báo và cảnh báo tiêu thụ năng lượng

Bảng chính:

  • Cấu trúc bảng giống hệt myems_energy_db
  • Dữ liệu được tạo ra bởi các thuật toán dự báo

Lưu ý Phát triển:

  • Dữ liệu dự báo cần được cập nhật định kỳ
  • Hỗ trợ nhiều thuật toán dự báo (chuỗi thời gian, học máy, v.v.)
  • Độ chính xác dự báo cần được tối ưu hóa liên tục

10. Myems_fdd_db (Cơ sở dữ liệu Chẩn đoán Lỗi)

Mục đích: Lưu trữ dữ liệu liên quan đến phát hiện và chẩn đoán lỗi.

Đặc điểm:

  • Hỗ trợ nhiều kênh cảnh báo (web, email, SMS, WeChat, điện thoại)
  • Bộ máy quy tắc hỗ trợ logic phát hiện lỗi phức tạp
  • Hỗ trợ xác nhận và xử lý thông báo lỗi

Cấu trúc Bảng chính:

tên bảngMô tảtrường khóa
tbl_rulesQuy tắc chẩn đoánid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesTin nhắn Webid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesTin nhắn Emailid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxHộp thư đi SMSid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxhộp thư đến smsid, sender_mobile, message, status
tbl_wechat_messages_outboxHộp thư gửi tin nhắn WeChatid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxHộp thư đến tin nhắn WeChatid, sender_openid, message, status
tbl_email_serversCấu hình Máy chủ Emailid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsCấu hình WeChatid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Phân loại Quy tắc (category):

  • REALTIME: Cảnh báo thời gian thực
  • SYSTEM: Cảnh báo hệ thống
  • SPACE: Cảnh báo Không gian
  • METER: Cảnh báo Đồng hồ đo
  • TENANT: Cảnh báo Khách thuê
  • STORE: Cảnh báo Cửa hàng
  • SHOPFLOOR: Cảnh báo Xưởng sản xuất
  • EQUIPMENT: Cảnh báo Thiết bị
  • COMBINEDEQUIPMENT: Cảnh báo Thiết bị kết hợp

Mức độ ưu tiên (priority):

  • CRITICAL: Rất nghiêm trọng
  • HIGH: Cao
  • MEDIUM: Trung bình
  • LOW: Thấp

Lưu ý Phát triển:

  • Trường expression lưu trữ biểu thức quy tắc ở định dạng JSON
  • message_template hỗ trợ thay thế biến (ví dụ: $name, $value)
  • Quy tắc hỗ trợ cả thực thi theo lịch trình và thực thi ngay lập tức
  • Trạng thái thông báo: newsentacknowledged / timeout

11. myems_user_db (Cơ sở dữ liệu Người dùng)

Mục đích: Lưu trữ xác thực người dùng, khóa API, tin nhắn email, v.v.

Đặc điểm:

  • Khối lượng dữ liệu nhỏ, nhưng yêu cầu bảo mật cao
  • Hỗ trợ quản lý quyền người dùng
  • Hỗ trợ xác thực khóa API

Cấu trúc Bảng chính:

tên bảngMô tảtrường khóa
tbl_usersThông tin Người dùngid, 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_privilegesCấu hình Quyền hạnid, name, data (định dạng JSON)
tbl_sessionsphiên người dùngid, user_uuid, token, utc_expires
tbl_api_keysKhóa APIid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesTin nhắn Emailid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsCuộc hội thoại Emailid, recipient_email, token, expires_datetime_utc
tbl_logsNhật ký hoạt độngid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsTin nhắn Thông báoid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersNgười dùng mới (chờ kích hoạt)id, name, uuid, display_name, email, salt, password
tbl_verification_codesMã Xác minhid, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

Thiết kế Bảo mật:

  • Mật khẩu được lưu trữ bằng cách sử dụng muối + băm, không lưu trữ dạng văn bản thuần
  • Hỗ trợ thời gian hết hạn tài khoản và mật khẩu
  • Hỗ trợ giới hạn số lần thử đăng nhập thất bại
  • Khóa API hỗ trợ thời gian hết hạn

Lưu ý Phát triển:

  • Trường mật khẩu nên được mã hóa để lưu trữ, không truy vấn trực tiếp
  • Token phiên nên được dọn dẹp định kỳ để xóa các bản ghi hết hạn
  • Nhật ký hoạt động nên ghi lại tất cả các hành động quan trọng cho việc kiểm toán
  • Trạng thái thông báo: unreadreadarchived

12. myems_reporting_db (Cơ sở dữ liệu Báo cáo)

Mục đích: Lưu trữ tin nhắn email và tệp đính kèm liên quan đến báo cáo.

Đặc điểm:

  • Khối lượng dữ liệu nhỏ
  • Hỗ trợ lưu trữ mẫu báo cáo và các tệp đã tạo

Cấu trúc Bảng chính:

tên bảngMô tảtrường khóa
tbl_reportsCấu hình Báo cáoid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filestài liệu báo cáoid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesTệp Mẫu Báo cáoid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesTin nhắn Emailid, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

Lưu ý Phát triển:

  • Tệp báo cáo hỗ trợ các định dạng Excel, PDF và Word
  • Tệp mẫu được sử dụng để tạo báo cáo
  • Báo cáo hỗ trợ cả tạo theo lịch trình và tạo ngay lập tức
  • Tệp được lưu trữ bằng LONGBLOB; lưu ý giới hạn kích thước

13. myems_production_db (Cơ sở dữ liệu Sản xuất)

Mục đích: Lưu trữ dữ liệu sản phẩm liên quan đến sản xuất.

Đặc điểm:

  • Khối lượng dữ liệu nhỏ
  • Được sử dụng cho phân tích tương quan tiêu thụ năng lượng sản xuất

Cấu trúc Bảng chính:

tên bảngMô tảtrường khóa
tbl_productsThông tin Sản phẩmid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsThông tin Đội nhómid, name, uuid, description
tbl_shiftsthông tin ca làm việcid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyLượng sản xuất hàng giờ của Xưởng sản xuấtid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyLượng sản xuất hàng giờ của Không gianid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsLiên kết Xưởng sản xuất và sản phẩmid, shopfloor_id, product_id
tbl_shopfloors_teamsLiên kết Xưởng sản xuất và đội nhómid, shopfloor_id, team_id

Lưu ý phát triển:

  • Dữ liệu sản xuất được sử dụng để tính toán tiêu thụ năng lượng đơn vị sản phẩm
  • Hỗ trợ thống kê dựa trên các chiều như sản phẩm, đội nhóm, xưởng sản xuất, v.v.
  • Liên kết với dữ liệu tiêu thụ năng lượng để tính toán các chỉ số hiệu quả năng lượng

Mối quan hệ luồng dữ liệu

Quy trình thu thập dữ liệu

Luồng Thu thập Dữ liệu

Thiết bị / Cảm biến
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Dịch vụ Thu thập Dữ liệu)
↓ (Ghi)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Chuẩn hóa Dữ liệu)
myems-normalization (Dịch vụ Chuẩn hóa)
↓ (Dọn dẹp Dữ liệu)
myems-cleaning (Dịch vụ Dọn dẹp)
↓ (Tổng hợp Dữ liệu)
myems-aggregation (Dịch vụ Tổng hợp)
↓ (Ghi)
myems_energy_db (Dữ liệu Năng lượng)
myems_billing_db (Dữ liệu Thanh toán)
myems_carbon_db (Dữ liệu Phát thải Carbon)

Luồng Truy vấn Dữ liệu

Yêu cầu Người dùng

myems-api (Dịch vụ API)
↓ (Truy vấn)
myems_system_db (Dữ liệu Cấu hình)
myems_historical_db (Dữ liệu Lịch sử)
myems_energy_db (Dữ liệu Năng lượng)
↓ (Phản hồi)
myems-web / myems-admin (Hiển thị Frontend)

Sơ đồ Mối quan hệ Dữ liệu

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Tính toán Tổng hợp)
myems_energy_db.tbl_meter_hourly
↓ (Liên kết)
myems_system_db.tbl_meters
↓ (Liên kết)
myems_system_db.tbl_equipments
↓ (Liên kết)
myems_system_db.tbl_spaces

Quy tắc Thiết kế Cấu trúc Bảng

Trường chung

Tất cả các bảng đều chứa các trường chung sau:

tên trườngkiểuMô tả
idBIGINT NOT NULL AUTO_INCREMENTKhóa chính, tự tăng
nameVARCHAR(255)tên
uuidCHAR(36)UUID, Được sử dụng cho tích hợp hệ thống bên ngoài
descriptionVARCHAR(255)Mô tả (tùy chọn)

Trường thời gian

tên trườngkiểuMô tả
utc_date_timeDATETIMEThời gian UTC (bảng dữ liệu lịch sử)
start_datetime_utcDATETIMEThời gian bắt đầu của khoảng thời gian (bảng dữ liệu tổng hợp)
created_datetime_utcDATETIMEThời gian Tạo
updated_datetime_utcDATETIMEThời gian Cập nhật
last_run_datetime_utcDATETIMEThời gian Chạy lần cuối
next_run_datetime_utcDATETIMEThời gian Chạy tiếp theo

Lưu ý: Tất cả các trường thời gian nên sử dụng thời gian UTC một cách thống nhất, và hiển thị phía frontend nên được chuyển đổi sang thời gian địa phương.

Trường số

tên trườngkiểuMô tả
actual_valueDECIMAL(21, 6)Giá trị thực tế, hỗ trợ độ chính xác cao (6 chữ số thập phân)
set_valueDECIMAL(21, 6)giá trị đặt
rated_capacityDECIMAL(21, 6)Dung lượng định mức
rated_powerDECIMAL(21, 6)công suất định mức

Trường JSON

tên trườngkiểuMô tả
connectionLONGTEXTCấu hình Kết nối (định dạng JSON)
expressionLONGTEXTBiểu thức (định dạng JSON)
payloadLONGTEXTTải (định dạng JSON)
dataLONGTEXTDữ liệu (định dạng JSON)

Lưu ý: Trường JSON lưu trữ chuỗi JSON định dạng và cần được phân tích trước khi sử dụng.

Trường trạng thái

tên trườngkiểuMô tả
is_enabledBOOLBật hay không
is_activeBOOLTrạng thái kích hoạt
is_badBOOLCó dữ liệu lỗi không
is_publishedBOOLĐã được phát hành chưa?
is_countedBOOLCó được tính vào thống kê không
statusVARCHAR(32)Trạng thái (ví dụ: new, sent, done, error)

Thiết kế Chỉ mục

Chỉ mục khóa chính:

  • Tất cả các bảng đều có PRIMARY KEY (id)

Chỉ mục duy nhất:

  • Các trường khóa (như name, uuid) thường có các chỉ mục duy nhất

Chỉ mục kết hợp:

  • Thiết lập chỉ mục kết hợp cho các tổ hợp trường được truy vấn thường xuyên
  • Ví dụ: (point_id, utc_date_time), (meter_id, start_datetime_utc)

Chỉ mục thời gian:

  • Trường thời gian thường được lập chỉ mục riêng và hỗ trợ truy vấn khoảng thời gian