انتقل إلى المحتوى الرئيسي

وثيقة تصميم قاعدة بيانات ماي إم إس (MyEMS)

تهدف هذه الوثيقة إلى المبرمجين، وتقدم شرحًا مفصلًا لهيكلة قاعدة البيانات وهياكل الجداول وفلسفة التصميم لنظام ماي إم إس (MyEMS) لإدارة الطاقة.

جدول المحتويات


تصميم هيكل قاعدة البيانات

فلسفة التصميم

  1. فصل البيانات: فصل البيانات إلى قواعد بيانات مختلفة بناءً على نوع البيانات واستخدامها لتجنب أن تصبح قاعدة بيانات واحدة كبيرة جدًا
  2. فصل القراءة والكتابة: يتم تخزين البيانات التاريخية بتنسيق تسلسلي زمني، مما يسمح بإجراء استعلامات كفءة
  3. التمدد الأفقي: يمكن توسيع قواعد البيانات الكبيرة (historical_db، energy_db) بشكل مستقل
  4. معايير موحدة: تستخدم جميع قواعد البيانات نفس مجموعة الأحرف وقواعد الفرز

تكوين قاعدة البيانات

تستخدم جميع قواعد البيانات التكوين التالي بشكل موحد:

  • مجموعة الأحرف: utf8mb4 (تدعم مجموعة أحرف UTF-8 الكاملة، بما في ذلك الإيموجي)
  • قاعدة الفرز: utf8mb4_unicode_ci (قاعدة فرز يونيكود)
  • محرك التخزين: InnoDB (افتراضي، يدعم المعاملات والمفاتيح الخارجية)

قواعد التسمية

  • تسمية قاعدة البيانات: myems_{Function}_db (حروف صغيرة، مفصولة بشرط سفلية)
  • تسمية الجدول: tbl_{Entity Name} (حروف صغيرة، مفصولة بشرط سفلية)
  • تسمية الحقل: حروف صغيرة، مفصولة بشرط سفلية، مثل start_datetime_utc
  • تسمية الفهرس: tbl_{Table Name}_index_{Sequence Number}

وصف مفصل للقاعدة البيانات

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 نوع LONGTEXT لتخزين سلاسل JSON المنسقة

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

وصف نوع البيانات:

  • practice_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_{Object Type}_{Direction}_{Classification}_{Time Granularity}
  • نوع الكائن: 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

تصميم الفهرس:

  • جميع الجداول تحتوي على فهرس مركب: (Object ID, Classification ID, start_datetime_utc) أو (Object ID, start_datetime_utc)
  • تدعم الاستعلامات السريعة حسب الكائن ونطاق الوقت

احتياطات التطوير:

  • start_datetime_utc يمثل وقت بدء الفترة الزمنية (مثل 1 يناير 2024-01 00:00:00 يمثل 1 يناير من 0:00 إلى 1:00)
  • actual_value هو القيمة المجتمعة، وليس القيمة الأصلية
  • يتم حساب البيانات بشكل دوري بواسطة خدمة التجميع، ولا يتم كتابتها في الوقت الفعلي
  • لاحظ تحويل المنطقة الزمنية عند إجراء الاستعلام

4. myems_billing_db (قاعدة بيانات الفواتير)

الغرض: تخزين بيانات استهلاك الطاقة المتعلقة بالفواتير. هيكلها مشابه لـ myems_energy_db، لكن البيانات تُحسب بناءً على أسعار الكهرباء.

الميزات:

  • هيكل الجدول مطابق لـ myems_energy_db
  • يتم حساب البيانات بواسطة خدمة myems-aggregation باستخدام تكوينات أسعار الكهرباء
  • تدعم قواعد الفواتير المعقدة مثل أسعار الكهرباء حسب وقت الاستخدام والتسعير الهرمي

الجداول الرئيسية:

  • نفس هيكل الجدول مثل myems_energy_db
  • قيم البيانات مضروبة في سعر الكهرباء المقابل، وعادةً ما تكون في وحدات العملة (مثل يوان صيني، دولار أمريكي)

ملاحظات التطوير:

  • تعتمد بيانات الفواتير على تكوين أسعار الكهرباء في 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 (كيلوغرامات مكافئ ثاني أكسيد الكربون)

ملاحظات التطوير:

  • قد تتغير عوامل انبعاث الكربون بمرور الوقت، لذا يجب دعم العوامل التاريخية
  • أنواع الطاقة المختلفة (كهرباء، غاز، بترول، إلخ) لها عوامل انبعاث مختلفة
  • تدعم حساب انبعاثات الكربون للنطاق 1 والنطاق 2 والنطاق 3

6. myems_energy_baseline_db (قاعدة بيانات خط الأساس للطاقة)

الغرض: تخزين بيانات خط الأساس للطاقة للتحليل الموفّر للطاقة وتقييم الكفاءة في استخدام الطاقة.

الميزات:

  • هيكل الجدول مشابه لـ myems_energy_db
  • تُحسب بيانات خط الأساس عادةً بناءً على البيانات التاريخية أو القيم القياسية
  • تُستخدم لمقارنة استهلاك الطاقة الفعلي بخط الأساس لحساب توفير الطاقة

الجداول الرئيسية:

  • نفس هيكل الجدول مثل myems_energy_db
  • تخزن قيم خط الأساس بدلاً من القيم الفعلية

ملاحظات التطوير:

  • تحتاج بيانات خط الأساس إلى تحديث دوري
  • تدعم طرق حساب خط الأساس المتعددة (متوسط تاريخي، تحليل الانحدار، قيم قياسية، إلخ)

7. Myems_energy_model_db (قاعدة بيانات نموذج استهلاك الطاقة)

الغرض: تخزين بيانات نموذج استهلاك الطاقة لـ 8760 ساعة سنويًا (8760 ساعة في السنة).

الميزات:

  • يخزن كل كائن 8760 سجل (بيانات ساعة لمدة سنة واحدة)
  • تُستخدم للتنبؤ باستهلاك الطاقة والتخطيط
  • يحتوي اسم الجدول على اللاحقة _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 (قاعدة بيانات تشخيص العيوب)

الغرض: تخزين البيانات المتعلقة بكشف العيوب وتشخيصها.

الميزات:

  • تدعم قنوات تنبيه متعددة (ويب، بريد إلكتروني، رسالة نصية، ويتشات، هاتف)
  • يدعم محرك القواعد منطق كشف العيوب المعقد
  • يدعم تأكيد ومعالجة رسائل العيوب

هيكل الجدول الرئيسي:

اسم الجدولالتعليماتالحقل الرئيسي
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_outboxصندوق الوارد للرسائل النصية (SMS)id, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxصندوق الوارد للرسائل النصية (SMS)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_keysمفتاح APIid, 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رمز التحقق (CAPTCHA)id, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

تصميم الأمان:

  • يتم تخزين كلمات المرور باستخدام الملح + التجزئة (hash)، ولا يتم تخزينها كنص عادي
  • تدعم وقت انتهاء صلاحية الحساب وكلمة المرور
  • تدعم حدود محاولة تسجيل الدخول الفاشلة
  • تدعم مفاتيح 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_timeDATETIMEوقت UTC (جدول البيانات التاريخية)
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)

فهرس الوقت:

  • عادةً ما يتم فهرسة حقل الوقت بشكل منفصل، ويدعم الاستعلامات بنطاق زمني