---
title: 'Componentele unificării'
section: 'Concepts'
weight: 2
description: Elementele de bază ale unificării datelor – standardizarea formatului, unificarea structurii, unificarea semantică, normalizarea și utilizarea datelor unificate.
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## Standardizarea formatului

Toate datele care provin din surse diferite se convertesc într-un format unic.

De exemplu, datele de la dispozitivele IoT sosesc în format JSON:

```json title="example.json"
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}
```

## Unificarea structurii datelor

Pentru toate datele se definește o structură unică, indiferent de sursa lor.

Toate datele se stochează în tabelul `channel_data`, care le asociază cu echipamentele, sesiunile, canalele și unitățile de măsură:

| Câmp              | Tip                              | Descriere                                                      |
| ----------------- | -------------------------------- | -------------------------------------------------------------- |
| `id`              | `bigint`                         | Identificatorul unic al înregistrării (cheie primară).         |
| `equipment_id`    | `bigint`                         | Referință la echipament (`equipment.id`).                      |
| `seance_id`       | `bigint`                         | Referință la sesiune (`seances.id`).                           |
| `channel_id`      | `bigint`                         | Referință la canal (`channels.id`).                            |
| `unit_id`         | `bigint`                         | Referință la unitatea de măsură (`units.id`).                  |
| `archive_type_id` | `integer`                        | Referință la tipul de arhivă (`referenceparameters.id`).       |
| `event_time`      | `integer`                        | Momentul evenimentului (de ex. marca temporală).               |
| `value`           | `character varying(100)`         | Valoarea primită de la canal.                                  |
| `created_at`      | `timestamp(6) without time zone` | Momentul în care înregistrarea a fost creată.                  |
| `updated_at`      | `timestamp(6) without time zone` | Momentul în care înregistrarea a fost actualizată ultima dată. |

Unde:

- `equipment_id`: identificatorul unic al echipamentului.
- `seance_id`: identificatorul unic al sesiunii.
- `channel_id`: identificatorul unic al canalului.
- `unit_id`: identificatorul unic al unității de măsură.

Când datele de la diferite dispozitive se stochează într-un depozit central:

- datele se convertesc într-un format și o structură unice;
- se stochează în tabelul de date unificate `channel_data`.

## Unificarea semantică

Toate datele au aceeași semnificație și aceeași interpretare în toate sistemele.

De exemplu:

- Toate mărcile temporale sunt în formatul `UTC`. Această regulă a fost implementată în etapa de proiectare a sistemului.
- Toate sistemele folosesc aceleași unități de măsură (de exemplu, grade Celsius).

Pentru a unifica unitățile de măsură, în sistem a fost adăugat modelul Units. Acesta stochează unitățile de măsură folosite pentru datele canalelor.

| Câmp                | Tip                              | Descriere                                                      |
| ------------------- | -------------------------------- | -------------------------------------------------------------- |
| `id`                | `bigint`                         | Identificatorul unic al înregistrării (cheie primară).         |
| `name`              | `character varying(30)`          | Denumirea unității de măsură.                                  |
| `varname`           | `character varying(30)`          | Numele scurt de variabilă al unității de măsură.               |
| `description`       | `character varying(100)`         | Descrierea unității de măsură.                                 |
| `conversion_factor` | `double precision`               | Factorul de conversie al unității de măsură.                   |
| `rounding`          | `smallint`                       | Numărul de zecimale la care se rotunjește valoarea.            |
| `synonyms`          | `character varying[]`            | Tablou cu sinonimele unității de măsură.                       |
| `created_at`        | `timestamp(6) without time zone` | Momentul în care înregistrarea a fost creată.                  |
| `updated_at`        | `timestamp(6) without time zone` | Momentul în care înregistrarea a fost actualizată ultima dată. |

## Normalizarea datelor

Modelul de date al sistemului este adus la forma normală Boyce-Codd (a treia) în ceea ce privește valorile atomice (scalare). Unele entități din modelul de date folosesc structuri compuse pentru a optimiza lucrul cu atributele rare, nestandard.

Datele sunt împărțite în tabele logice (`equipment`, `channels`, `units`, `sessions`), ceea ce elimină redundanța și duplicarea.

De exemplu:

- Tabelul `channel_data` face referire la tabelele `equipment`, `channels`, `units` și `sessions` prin chei străine.

## Utilizarea datelor unificate

Datele unificate pot fi folosite pentru analiză, vizualizare, învățare automată și alte sarcini.

### Analiza datelor cu 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
```

### Obținerea datelor prin REST API

Exemplu de cerere:

```bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Exemplu de răspuns:

```json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```
