---
title: 'Komponente unifikacije'
section: 'Concepts'
weight: 2
description: Sastavni delovi unifikacije podataka – standardizacija formata, unifikacija strukture, semantička unifikacija, normalizacija i korišćenje unifikovanih podataka.
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## Standardizacija formata

Svi podaci koji stižu iz različitih izvora konvertuju se u jedinstveni format.

Na primer, podaci sa IoT uređaja stižu u formatu JSON:

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

## Unifikacija strukture podataka

Za sve podatke definisana je jedinstvena struktura, bez obzira na njihov izvor.

Svi podaci čuvaju se u tabeli `channel_data`, koja ih povezuje sa opremom, sesijama, kanalima i jedinicama mere:

| Polje             | Tip                              | Opis                                                |
| ----------------- | -------------------------------- | --------------------------------------------------- |
| `id`              | `bigint`                         | Jedinstveni identifikator zapisa (primarni ključ).  |
| `equipment_id`    | `bigint`                         | Referenca na opremu (`equipment.id`).               |
| `seance_id`       | `bigint`                         | Referenca na sesiju (`seances.id`).                 |
| `channel_id`      | `bigint`                         | Referenca na kanal (`channels.id`).                 |
| `unit_id`         | `bigint`                         | Referenca na jedinicu mere (`units.id`).            |
| `archive_type_id` | `integer`                        | Referenca na tip arhive (`referenceparameters.id`). |
| `event_time`      | `integer`                        | Vreme događaja (npr. vremenska oznaka).             |
| `value`           | `character varying(100)`         | Vrednost primljena sa kanala.                       |
| `created_at`      | `timestamp(6) without time zone` | Vreme kreiranja zapisa.                             |
| `updated_at`      | `timestamp(6) without time zone` | Vreme poslednjeg ažuriranja zapisa.                 |

Značenje polja:

- `equipment_id`: jedinstveni identifikator opreme.
- `seance_id`: jedinstveni identifikator sesije.
- `channel_id`: jedinstveni identifikator kanala.
- `unit_id`: jedinstveni identifikator jedinice mere.

Kada se podaci sa različitih uređaja smeštaju u centralno skladište:

- podaci se konvertuju u jedinstveni format i strukturu;
- čuvaju se u unifikovanoj tabeli podataka `channel_data`.

## Semantička unifikacija

Svi podaci imaju isto značenje i tumačenje u svim sistemima.

Na primer:

- Sve vremenske oznake su u formatu `UTC`. To je implementirano u fazi projektovanja sistema.
- Svi sistemi koriste iste jedinice mere (npr. stepene Celzijusa).

Radi unifikacije jedinica mere, u sistem je dodat model Units. U njemu se čuvaju jedinice mere koje se koriste za podatke kanala.

| Polje               | Tip                              | Opis                                               |
| ------------------- | -------------------------------- | -------------------------------------------------- |
| `id`                | `bigint`                         | Jedinstveni identifikator zapisa (primarni ključ). |
| `name`              | `character varying(30)`          | Naziv jedinice mere.                               |
| `varname`           | `character varying(30)`          | Kratko ime promenljive za jedinicu mere.           |
| `description`       | `character varying(100)`         | Opis jedinice mere.                                |
| `conversion_factor` | `double precision`               | Faktor konverzije za jedinicu mere.                |
| `rounding`          | `smallint`                       | Broj decimalnih mesta za zaokruživanje.            |
| `synonyms`          | `character varying[]`            | Niz sinonima za jedinicu mere.                     |
| `created_at`        | `timestamp(6) without time zone` | Vreme kreiranja zapisa.                            |
| `updated_at`        | `timestamp(6) without time zone` | Vreme poslednjeg ažuriranja zapisa.                |

## Normalizacija podataka

Model podataka sistema doveden je u Bojs-Kodovu (treću) normalnu formu u pogledu atomičnih (skalarnih) vrednosti. Pojedini entiteti modela podataka koriste složene strukture kako bi se optimizovao rad sa retkim, nestandardnim atributima.

Podaci su podeljeni na logičke tabele (`equipment`, `channels`, `units`, `sessions`), čime se uklanjaju redundantnost i dupliranje.

Na primer:

- Tabela `channel_data` preko stranih ključeva upućuje na tabele `equipment`, `channels`, `units` i `sessions`.

## Korišćenje unifikovanih podataka

Unifikovani podaci mogu da se koriste za analizu, vizuelizaciju, mašinsko učenje i druge zadatke.

### Analiza podataka pomoću jezika 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
```

### Preuzimanje podataka preko interfejsa REST API

Primer zahteva:

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

Primer odgovora:

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