---
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
  }
]
```
