---
title: "Composants d'unification"
section: 'Concepts'
weight: 2
description: Les briques de base de l'unification des données — normalisation du format, unification de la structure, unification sémantique, normalisation et exploitation des données unifiées.
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## Normalisation du format

Toutes les données provenant de sources différentes sont converties dans un format unique.

Par exemple, les données issues des appareils IoT arrivent au format JSON :

```json title="example.json"
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}
```

## Unification de la structure des données

Une structure unique est définie pour l'ensemble des données, quelle que soit leur source.

Toutes les données sont stockées dans la table `channel_data`, qui les associe à l'équipement, aux sessions, aux canaux et aux unités de mesure :

| Champ             | Type                             | Description                                                  |
| ----------------- | -------------------------------- | ------------------------------------------------------------ |
| `id`              | `bigint`                         | Identifiant unique de l'enregistrement (clé primaire).       |
| `equipment_id`    | `bigint`                         | Référence vers l'équipement (`equipment.id`).                |
| `seance_id`       | `bigint`                         | Référence vers la session (`seances.id`).                    |
| `channel_id`      | `bigint`                         | Référence vers le canal (`channels.id`).                     |
| `unit_id`         | `bigint`                         | Référence vers l'unité de mesure (`units.id`).               |
| `archive_type_id` | `integer`                        | Référence vers le type d'archive (`referenceparameters.id`). |
| `event_time`      | `integer`                        | Heure de l'événement (par ex. horodatage).                   |
| `value`           | `character varying(100)`         | Valeur reçue depuis le canal.                                |
| `created_at`      | `timestamp(6) without time zone` | Heure de création de l'enregistrement.                       |
| `updated_at`      | `timestamp(6) without time zone` | Heure de la dernière mise à jour de l'enregistrement.        |

Où :

- `equipment_id` : identifiant unique de l'équipement.
- `seance_id` : identifiant unique de la session.
- `channel_id` : identifiant unique du canal.
- `unit_id` : identifiant unique de l'unité de mesure.

Lorsque les données provenant de différents appareils sont stockées dans un référentiel central :

- les données sont converties dans un format et une structure uniques ;
- elles sont enregistrées dans la table de données unifiées `channel_data`.

## Unification sémantique

Toutes les données ont la même signification et la même interprétation dans l'ensemble des systèmes.

Par exemple :

- Tous les horodatages sont au format `UTC`. Ce choix a été appliqué dès la phase de conception du système.
- Tous les systèmes utilisent les mêmes unités de mesure (par ex. les degrés Celsius).

Pour unifier les unités de mesure, le modèle Units a été ajouté au système. Il stocke les unités de mesure utilisées pour les données des canaux.

| Champ               | Type                             | Description                                            |
| ------------------- | -------------------------------- | ------------------------------------------------------ |
| `id`                | `bigint`                         | Identifiant unique de l'enregistrement (clé primaire). |
| `name`              | `character varying(30)`          | Nom de l'unité de mesure.                              |
| `varname`           | `character varying(30)`          | Nom de variable abrégé de l'unité de mesure.           |
| `description`       | `character varying(100)`         | Description de l'unité de mesure.                      |
| `conversion_factor` | `double precision`               | Facteur de conversion de l'unité de mesure.            |
| `rounding`          | `smallint`                       | Nombre de décimales pour l'arrondi.                    |
| `synonyms`          | `character varying[]`            | Tableau de synonymes de l'unité de mesure.             |
| `created_at`        | `timestamp(6) without time zone` | Heure de création de l'enregistrement.                 |
| `updated_at`        | `timestamp(6) without time zone` | Heure de la dernière mise à jour de l'enregistrement.  |

## Normalisation des données

Le modèle de données du système est ramené à la forme normale de Boyce-Codd (troisième forme normale) au regard des valeurs atomiques (scalaires). Certaines entités du modèle de données recourent à des structures composites afin d'optimiser le traitement des attributs rares et non standard.

Les données sont réparties dans des tables logiques (`equipment`, `channels`, `units`, `sessions`), ce qui élimine la redondance et les doublons.

Par exemple :

- La table `channel_data` référence les tables `equipment`, `channels`, `units` et `sessions` au moyen de clés étrangères.

## Exploitation des données unifiées

Les données unifiées peuvent être utilisées à des fins d'analyse, de visualisation, d'apprentissage automatique et pour d'autres tâches.

### Analyse des données avec 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
```

### Interrogation des données via l'API REST

Exemple de requête :

```bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Exemple de réponse :

```json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```
