---
title: 'Komponenty unifikácie'
section: 'Concepts'
weight: 2
description: Stavebné prvky unifikácie údajov — štandardizácia formátu, unifikácia štruktúry, sémantická unifikácia, normalizácia a využitie unifikovaných údajov.
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## Štandardizácia formátu

Všetky údaje prichádzajúce z rôznych zdrojov sa prevádzajú do jednotného formátu.

Napríklad údaje zo zariadení IoT prichádzajú vo formáte JSON:

```json title="example.json"
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}
```

## Unifikácia štruktúry údajov

Pre všetky údaje je definovaná jednotná štruktúra bez ohľadu na ich zdroj.

Všetky údaje sa ukladajú do tabuľky `channel_data`, ktorá ich prepája so zariadením, reláciami, kanálmi a meracími jednotkami:

| Pole              | Typ                              | Popis                                            |
| ----------------- | -------------------------------- | ------------------------------------------------ |
| `id`              | `bigint`                         | Jedinečný identifikátor záznamu (primárny kľúč). |
| `equipment_id`    | `bigint`                         | Odkaz na zariadenie (`equipment.id`).            |
| `seance_id`       | `bigint`                         | Odkaz na reláciu (`seances.id`).                 |
| `channel_id`      | `bigint`                         | Odkaz na kanál (`channels.id`).                  |
| `unit_id`         | `bigint`                         | Odkaz na meraciu jednotku (`units.id`).          |
| `archive_type_id` | `integer`                        | Odkaz na typ archívu (`referenceparameters.id`). |
| `event_time`      | `integer`                        | Čas udalosti (napr. časová pečiatka).            |
| `value`           | `character varying(100)`         | Hodnota prijatá z kanála.                        |
| `created_at`      | `timestamp(6) without time zone` | Čas vytvorenia záznamu.                          |
| `updated_at`      | `timestamp(6) without time zone` | Čas poslednej aktualizácie záznamu.              |

Kde:

- `equipment_id`: Jedinečný identifikátor zariadenia.
- `seance_id`: Jedinečný identifikátor relácie.
- `channel_id`: Jedinečný identifikátor kanála.
- `unit_id`: Jedinečný identifikátor meracej jednotky.

Pri ukladaní údajov z rôznych zariadení do centrálneho úložiska:

- údaje sa prevedú do jednotného formátu a štruktúry;
- ukladajú sa do unifikovanej tabuľky údajov `channel_data`.

## Sémantická unifikácia

Všetky údaje majú vo všetkých systémoch rovnaký význam a interpretáciu.

Napríklad:

- Všetky časové pečiatky sú vo formáte `UTC`. Toto bolo zavedené už vo fáze návrhu systému.
- Všetky systémy používajú rovnaké meracie jednotky (napr. stupne Celzia).

Na zjednotenie meracích jednotiek bol do systému pridaný model Units. Uchováva meracie jednotky používané pre údaje kanálov.

| Pole                | Typ                              | Popis                                            |
| ------------------- | -------------------------------- | ------------------------------------------------ |
| `id`                | `bigint`                         | Jedinečný identifikátor záznamu (primárny kľúč). |
| `name`              | `character varying(30)`          | Názov meracej jednotky.                          |
| `varname`           | `character varying(30)`          | Krátky názov premennej pre meraciu jednotku.     |
| `description`       | `character varying(100)`         | Popis meracej jednotky.                          |
| `conversion_factor` | `double precision`               | Prepočítavací koeficient meracej jednotky.       |
| `rounding`          | `smallint`                       | Počet desatinných miest na zaokrúhlenie.         |
| `synonyms`          | `character varying[]`            | Pole synoným pre meraciu jednotku.               |
| `created_at`        | `timestamp(6) without time zone` | Čas vytvorenia záznamu.                          |
| `updated_at`        | `timestamp(6) without time zone` | Čas poslednej aktualizácie záznamu.              |

## Normalizácia údajov

Dátový model systému je z hľadiska atomických (skalárnych) hodnôt prevedený do Boyceovej-Coddovej (tretej) normálnej formy. Niektoré entity dátového modelu používajú zložené štruktúry na optimalizáciu práce so zriedkavými, neštandardnými atribútmi.

Údaje sú rozdelené do logických tabuliek (`equipment`, `channels`, `units`, `sessions`), čím sa odstraňuje nadbytočnosť a duplicita.

Napríklad:

- Tabuľka `channel_data` odkazuje na tabuľky `equipment`, `channels`, `units` a `sessions` prostredníctvom cudzích kľúčov.

## Využitie unifikovaných údajov

Unifikované údaje možno použiť na analýzu, vizualizáciu, strojové učenie a ďalšie úlohy.

### Analýza údajov pomocou 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
```

### Vyžiadanie údajov cez REST API

Príklad požiadavky:

```bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Príklad odpovede:

```json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```
