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