---
title: 'Komponenten der Vereinheitlichung'
section: 'Concepts'
weight: 2
description: Die Bausteine der Datenvereinheitlichung — Formatstandardisierung, Strukturvereinheitlichung, semantische Vereinheitlichung, Normalisierung und die Nutzung vereinheitlichter Daten.
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## Formatstandardisierung

Alle Daten aus unterschiedlichen Quellen werden in ein einheitliches Format überführt.

Daten von IoT-Geräten treffen beispielsweise im JSON-Format ein:

```json title="example.json"
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}
```

## Vereinheitlichung der Datenstruktur

Für alle Daten wird unabhängig von ihrer Quelle eine einheitliche Struktur festgelegt.

Alle Daten werden in der Tabelle `channel_data` gespeichert, die sie mit Geräten, Sitzungen, Kanälen und Maßeinheiten verknüpft:

| Feld              | Typ                              | Beschreibung                                          |
| ----------------- | -------------------------------- | ----------------------------------------------------- |
| `id`              | `bigint`                         | Eindeutige Datensatzkennung (Primärschlüssel).        |
| `equipment_id`    | `bigint`                         | Verweis auf das Gerät (`equipment.id`).               |
| `seance_id`       | `bigint`                         | Verweis auf die Sitzung (`seances.id`).               |
| `channel_id`      | `bigint`                         | Verweis auf den Kanal (`channels.id`).                |
| `unit_id`         | `bigint`                         | Verweis auf die Maßeinheit (`units.id`).              |
| `archive_type_id` | `integer`                        | Verweis auf den Archivtyp (`referenceparameters.id`). |
| `event_time`      | `integer`                        | Zeitpunkt des Ereignisses (z. B. Zeitstempel).        |
| `value`           | `character varying(100)`         | Der vom Kanal empfangene Wert.                        |
| `created_at`      | `timestamp(6) without time zone` | Zeitpunkt der Erstellung des Eintrags.                |
| `updated_at`      | `timestamp(6) without time zone` | Zeitpunkt der letzten Aktualisierung des Eintrags.    |

Dabei gilt:

- `equipment_id`: Eindeutige Gerätekennung.
- `seance_id`: Eindeutige Sitzungskennung.
- `channel_id`: Eindeutige Kanalkennung.
- `unit_id`: Eindeutige Kennung der Maßeinheit.

Wenn Daten verschiedener Geräte in einem zentralen Speicher abgelegt werden:

- werden die Daten in ein einheitliches Format und eine einheitliche Struktur überführt;
- werden sie in der Tabelle der vereinheitlichten Daten `channel_data` gespeichert.

## Semantische Vereinheitlichung

Alle Daten haben über sämtliche Systeme hinweg dieselbe Bedeutung und Interpretation.

Zum Beispiel:

- Alle Zeitstempel liegen im Format `UTC` vor. Dies wurde in der Entwurfsphase des Systems umgesetzt.
- Alle Systeme verwenden dieselben Maßeinheiten (z. B. Grad Celsius).

Zur Vereinheitlichung der Maßeinheiten wurde dem System das Modell Units hinzugefügt. Es speichert die für die Kanaldaten verwendeten Maßeinheiten.

| Feld                | Typ                              | Beschreibung                                       |
| ------------------- | -------------------------------- | -------------------------------------------------- |
| `id`                | `bigint`                         | Eindeutige Datensatzkennung (Primärschlüssel).     |
| `name`              | `character varying(30)`          | Bezeichnung der Maßeinheit.                        |
| `varname`           | `character varying(30)`          | Kurzer Variablenname für die Maßeinheit.           |
| `description`       | `character varying(100)`         | Beschreibung der Maßeinheit.                       |
| `conversion_factor` | `double precision`               | Umrechnungsfaktor für eine Maßeinheit.             |
| `rounding`          | `smallint`                       | Anzahl der Nachkommastellen für die Rundung.       |
| `synonyms`          | `character varying[]`            | Array von Synonymen für die Maßeinheit.            |
| `created_at`        | `timestamp(6) without time zone` | Zeitpunkt der Erstellung des Eintrags.             |
| `updated_at`        | `timestamp(6) without time zone` | Zeitpunkt der letzten Aktualisierung des Eintrags. |

## Datennormalisierung

Das Datenmodell des Systems ist hinsichtlich atomarer (skalarer) Werte auf die Boyce-Codd-Normalform (dritte Normalform) reduziert. Einige Entitäten des Datenmodells verwenden zusammengesetzte Strukturen, um die Arbeit mit seltenen, nicht standardmäßigen Attributen zu optimieren.

Die Daten werden in logische Tabellen (`equipment`, `channels`, `units`, `sessions`) aufgeteilt, wodurch Redundanz und Duplikate vermieden werden.

Zum Beispiel:

- Die Tabelle `channel_data` verweist über Fremdschlüssel auf die Tabellen `equipment`, `channels`, `units` und `sessions`.

## Nutzung vereinheitlichter Daten

Vereinheitlichte Daten können für Analyse, Visualisierung, maschinelles Lernen und weitere Aufgaben genutzt werden.

### Datenanalyse mit 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
```

### Datenabruf über die REST API

Beispielanfrage:

```bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Beispielantwort:

```json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```
