---
title: 'مكوّنات التوحيد'
section: 'Concepts'
weight: 2
description: اللبنات الأساسية لتوحيد البيانات — توحيد الصيغة، وتوحيد البنية، والتوحيد الدلالي، والتطبيع، واستخدام البيانات الموحّدة.
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## توحيد الصيغة

تُحوَّل جميع البيانات الواردة من مصادر مختلفة إلى صيغة واحدة.

على سبيل المثال، تصل البيانات من أجهزة IoT بصيغة JSON:

```json title="example.json"
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}
```

## توحيد بنية البيانات

تُحدَّد بنية واحدة لجميع البيانات بصرف النظر عن مصدرها.

تُخزَّن جميع البيانات في جدول `channel_data`، الذي يربطها بالمعدّات والجلسات والقنوات ووحدات القياس:

| الحقل             | النوع                            | الوصف                                             |
| ----------------- | -------------------------------- | ------------------------------------------------- |
| `id`              | `bigint`                         | معرّف فريد للسجل (المفتاح الأساسي).               |
| `equipment_id`    | `bigint`                         | إشارة إلى المعدّات (`equipment.id`).              |
| `seance_id`       | `bigint`                         | إشارة إلى الجلسة (`seances.id`).                  |
| `channel_id`      | `bigint`                         | إشارة إلى القناة (`channels.id`).                 |
| `unit_id`         | `bigint`                         | إشارة إلى وحدة القياس (`units.id`).               |
| `archive_type_id` | `integer`                        | إشارة إلى نوع الأرشيف (`referenceparameters.id`). |
| `event_time`      | `integer`                        | وقت وقوع الحدث (مثلاً الطابع الزمني).             |
| `value`           | `character varying(100)`         | القيمة الواردة من القناة.                         |
| `created_at`      | `timestamp(6) without time zone` | وقت إنشاء السجل.                                  |
| `updated_at`      | `timestamp(6) without time zone` | وقت آخر تحديث للسجل.                              |

حيث:

- `equipment_id`: معرّف فريد للمعدّات.
- `seance_id`: معرّف فريد للجلسة.
- `channel_id`: معرّف فريد للقناة.
- `unit_id`: معرّف فريد لوحدة القياس.

عند تخزين البيانات الواردة من أجهزة مختلفة في مستودع مركزي:

- تُحوَّل البيانات إلى صيغة وبنية موحّدتين؛
- وتُخزَّن في جدول البيانات الموحّد `channel_data`.

## التوحيد الدلالي

تحمل جميع البيانات المعنى والتفسير ذاتهما عبر كل الأنظمة.

على سبيل المثال:

- جميع الطوابع الزمنية بصيغة `UTC`. وقد طُبِّق ذلك في مرحلة تصميم النظام.
- تستخدم جميع الأنظمة وحدات القياس نفسها (مثل الدرجات المئوية).

لتوحيد وحدات القياس، أُضيف نموذج Units إلى النظام. وهو يخزّن وحدات القياس المستخدمة لبيانات القنوات.

| الحقل               | النوع                            | الوصف                                     |
| ------------------- | -------------------------------- | ----------------------------------------- |
| `id`                | `bigint`                         | معرّف فريد للسجل (المفتاح الأساسي).       |
| `name`              | `character varying(30)`          | اسم وحدة القياس.                          |
| `varname`           | `character varying(30)`          | اسم متغيّر مختصر لوحدة القياس.            |
| `description`       | `character varying(100)`         | وصف وحدة القياس.                          |
| `conversion_factor` | `double precision`               | معامل التحويل لوحدة القياس.               |
| `rounding`          | `smallint`                       | عدد المنازل العشرية المراد التقريب إليها. |
| `synonyms`          | `character varying[]`            | مصفوفة المرادفات لوحدة القياس.            |
| `created_at`        | `timestamp(6) without time zone` | وقت إنشاء السجل.                          |
| `updated_at`        | `timestamp(6) without time zone` | وقت آخر تحديث للسجل.                      |

## تطبيع البيانات

يُختزَل نموذج بيانات النظام إلى صيغة بويس-كود الطبيعية (الثالثة) من حيث القيم الذرّية (العددية القياسية). وتستخدم بعض الكيانات في نموذج البيانات بُنى مركّبة لتحسين التعامل مع السمات النادرة وغير القياسية.

تُقسَّم البيانات إلى جداول منطقية (`equipment` و`channels` و`units` و`sessions`)، ما يزيل التكرار والازدواجية.

على سبيل المثال:

- يشير جدول `channel_data` إلى جداول `equipment` و`channels` و`units` و`sessions` عبر المفاتيح الخارجية.

## استخدام البيانات الموحّدة

يمكن استخدام البيانات الموحّدة للتحليل والتمثيل المرئي والتعلّم الآلي ومهام أخرى.

### تحليل البيانات باستخدام SQL

```sql
SELECT equipment_id, AVG(value) as avg_value
FROM channel_data
WHERE archive_type_id = 4 AND channel_id = 3
GROUP BY equipment_id
ORDER BY equipment_id
```

### طلب البيانات عبر REST API

مثال على الطلب:

```bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

مثال على الاستجابة:

```json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```
