وثيقة تصميم قاعدة بيانات ماي إم إس (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 - تأتي البيانات من ملفات الخطة أو المدخلات اليدوية
ملاحظات التطوير:
- تحتاج بيانات الخطة إلى مقارنة بالبيانات الفعلية للتحليل
- تدعم الخطط متعددة المستويات (سنوية، شهرية، أسبوعية، إلخ)