---
title: 'Komponenty sjednocení'
section: 'Concepts'
weight: 2
description: Stavební kameny sjednocení dat — standardizace formátu, sjednocení struktury, sémantické sjednocení, normalizace a využití sjednocených dat.
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## Standardizace formátu

Veškerá data přicházející z různých zdrojů se převádějí do jednotného formátu.

Data z IoT zařízení například přicházejí ve formátu JSON:

```json title="example.json"
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}
```

## Sjednocení struktury dat

Pro všechna data je definována jednotná struktura bez ohledu na jejich zdroj.

Veškerá data se ukládají do tabulky `channel_data`, která je propojuje se zařízeními, relacemi, kanály a měrnými jednotkami:

| Pole              | Typ                              | Popis                                            |
| ----------------- | -------------------------------- | ------------------------------------------------ |
| `id`              | `bigint`                         | Jedinečný identifikátor záznamu (primární klíč). |
| `equipment_id`    | `bigint`                         | Odkaz na zařízení (`equipment.id`).              |
| `seance_id`       | `bigint`                         | Odkaz na relaci (`seances.id`).                  |
| `channel_id`      | `bigint`                         | Odkaz na kanál (`channels.id`).                  |
| `unit_id`         | `bigint`                         | Odkaz na měrnou jednotku (`units.id`).           |
| `archive_type_id` | `integer`                        | Odkaz na typ archivu (`referenceparameters.id`). |
| `event_time`      | `integer`                        | Čas události (např. časové razítko).             |
| `value`           | `character varying(100)`         | Hodnota přijatá z kanálu.                        |
| `created_at`      | `timestamp(6) without time zone` | Čas vytvoření záznamu.                           |
| `updated_at`      | `timestamp(6) without time zone` | Čas poslední aktualizace záznamu.                |

Kde:

- `equipment_id`: Jedinečný identifikátor zařízení.
- `seance_id`: Jedinečný identifikátor relace.
- `channel_id`: Jedinečný identifikátor kanálu.
- `unit_id`: Jedinečný identifikátor měrné jednotky.

Při ukládání dat z různých zařízení do centrálního úložiště platí:

- data se převedou do jednotného formátu a struktury;
- ukládají se do sjednocené datové tabulky `channel_data`.

## Sémantické sjednocení

Veškerá data mají napříč všemi systémy stejný význam a interpretaci.

Například:

- Všechna časová razítka jsou ve formátu `UTC`. To bylo zavedeno již ve fázi návrhu systému.
- Všechny systémy používají stejné měrné jednotky (např. stupně Celsia).

Za účelem sjednocení měrných jednotek byl do systému přidán model Units. Ukládá měrné jednotky používané pro data kanálů.

| Pole                | Typ                              | Popis                                            |
| ------------------- | -------------------------------- | ------------------------------------------------ |
| `id`                | `bigint`                         | Jedinečný identifikátor záznamu (primární klíč). |
| `name`              | `character varying(30)`          | Název měrné jednotky.                            |
| `varname`           | `character varying(30)`          | Zkrácený symbolický název měrné jednotky.        |
| `description`       | `character varying(100)`         | Popis měrné jednotky.                            |
| `conversion_factor` | `double precision`               | Převodní koeficient měrné jednotky.              |
| `rounding`          | `smallint`                       | Počet desetinných míst pro zaokrouhlení.         |
| `synonyms`          | `character varying[]`            | Pole synonym měrné jednotky.                     |
| `created_at`        | `timestamp(6) without time zone` | Čas vytvoření záznamu.                           |
| `updated_at`        | `timestamp(6) without time zone` | Čas poslední aktualizace záznamu.                |

## Normalizace dat

Datový model systému je z hlediska atomických (skalárních) hodnot převeden do Boyceovy–Coddovy (třetí) normální formy. Některé entity datového modelu využívají složené struktury za účelem optimalizace práce se vzácnými, nestandardními atributy.

Data jsou rozdělena do logických tabulek (`equipment`, `channels`, `units`, `sessions`), což odstraňuje redundanci a duplicitu.

Například:

- Tabulka `channel_data` odkazuje na tabulky `equipment`, `channels`, `units` a `sessions` prostřednictvím cizích klíčů.

## Využití sjednocených dat

Sjednocená data lze využít k analýze, vizualizaci, strojovému učení a dalším úlohám.

### Analýza dat pomocí 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žádání dat prostřednictvím REST API

Příklad požadavku:

```bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Příklad odpovědi:

```json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```
