وثيقة تصميم قاعدة بيانات ماي إم إس (MyEMS)
تهدف هذه الوثيقة إلى المبرمجين، وتقدم شرحًا مفصلًا لهيكلة قاعدة البيانات وهياكل الجداول وفلسفة التصميم لنظام ماي إم إس (MyEMS) لإدارة الطاقة.
جدول المحتويات
تصميم هيكل قاعدة البيانات
فلسفة التصميم
- فصل البيانات: فصل البيانات إلى قواعد بيانات مختلفة بناءً على نوع البيانات واستخدامها لتجنب أن تصبح قاعدة بيانات واحدة كبيرة جدًا
- فصل القراءة والكتابة: يتم تخزين البيانات التاريخية بتنسيق تسلسلي زمني، مما يسمح بإجراء استعلامات كفءة
- التمدد الأفقي: يمكن توسيع قواعد البيانات الكبيرة (historical_db، energy_db) بشكل مستقل
- معايير موحدة: تستخدم جميع قواعد البيانات نفس مجموعة الأحرف وقواعد الفرز
تكوين قاعدة البيانات
تستخدم جميع قواعد البيانات التكوين التالي بشكل موحد:
- مجموعة الأحرف:
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) - تدعم القواعد كل من التنفيذ المجدول والتنفيذ الفوري
- حالة الرسالة:
new→sent→acknowledged/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 | مفتاح API | 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 | رمز التحقق (CAPTCHA) | id, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc |
تصميم الأمان:
- يتم تخزين كلمات المرور باستخدام الملح + التجزئة (hash)، ولا يتم تخزينها كنص عادي
- تدعم وقت انتهاء صلاحية الحساب وكلمة المرور
- تدعم حدود محاولة تسجيل الدخول الفاشلة
- تدعم مفاتيح API وقت انتهاء الصلاحية
ملاحظات التطوير:
- يجب تشفير حقول كلمة المرور للتخزين، ولا تُستعلام مباشرة
- يجب تنظيف رموز الجلسة بانتظام لإزالة السجلات المنتهية الصلاحية
- يجب تسجيل جميع الإجراءات الحرجة في سجلات العمليات للمراجعة
- حالات الإخطار:
unread→read→archived
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
محددات تصميم هيكل الجداول
الحقول العامة
تحتوي جميع الجداول على الحقول المشتركة التالية:
| اسم الحقل | النوع | التعليمات |
|---|---|---|
id | BIGINT NOT NULL AUTO_INCREMENT | المفتاح الأساسي، يزداد تلقائيًا |
name | VARCHAR(255) | الاسم |
uuid | CHAR(36) | UUID، يستخدم للدمج مع الأنظمة الخارجية |
description | VARCHAR(255) | الوصف (اختياري) |
حقل الوقت
| اسم الحقل | النوع | التعل يمات |
|---|---|---|
utc_date_time | DATETIME | وقت UTC (جدول البيانات التاريخية) |
start_datetime_utc | DATETIME | وقت بدء الفترة الزمنية (جدول البيانات المجتمعة) |
created_datetime_utc | DATETIME | وقت الإنشاء |
updated_datetime_utc | DATETIME | وقت التحديث |
last_run_datetime_utc | DATETIME | آخر وقت تشغيل |
next_run_datetime_utc | DATETIME | التالي وقت التشغيل |
ملاحظة: يجب استخدام جميع حقول الوقت UTC بشكل موحد، ويتم تحويل العرض الأمامي إلى الوقت المحلي.
حقل الرقم
| اسم الحقل | النوع | التعليمات |
|---|---|---|
actual_value | DECIMAL(21, 6) | القيمة الفعلية، تدعم الدقة العالية (6 أرقام عشرية) |
set_value | DECIMAL(21, 6) | القيمة المحددة |
rated_capacity | DECIMAL(21, 6) | السعة المصنفة |
rated_power | DECIMAL(21, 6) | القوة المصنفة |
حقول JSON
| اسم الحقل | النوع | التعليمات |
|---|---|---|
connection | LONGTEXT | تكوين الاتصال (تنسيق JSON) |
expression | LONGTEXT | التعبير (تنسيق JSON) |
payload | LONGTEXT | الحمولة (تنسيق JSON) |
data | LONGTEXT | البيانات (تنسيق JSON) |
ملاحظة: تخزن حقول JSON سلاسل JSON المنسقة وتحتاج إلى تحليل قبل الاستخدام.
حقل الحالة
| اسم الحقل | النوع | التعليمات |
|---|---|---|
is_enabled | BOOL | هل مفعول أم لا |
is_active | BOOL | حالة التنشيط |
is_bad | BOOL | هل هناك بيانات سيئة |
is_published | BOOL | هل تم النشر؟ |
is_counted | BOOL | هل يتم تضمينه في الإحصاءات |
status | VARCHAR(32) | الحالة (مثل new، sent، done، error) |