وثيقة تصميم قاعدة بيانات ماي إم إس (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 |