---
title: 'Componentes de unificación'
section: 'Concepts'
weight: 2
description: 'Los componentes básicos de la unificación de datos: estandarización del formato, unificación de la estructura, unificación semántica, normalización y uso de los datos unificados.'
related:
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/main-goals
  - rest-api
---

## Estandarización del formato

Todos los datos procedentes de fuentes distintas se convierten a un único formato.

Por ejemplo, los datos de los dispositivos IoT llegan en formato JSON:

```json title="example.json"
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}
```

## Unificación de la estructura de datos

Se define una única estructura para todos los datos, independientemente de su origen.

Todos los datos se almacenan en la tabla `channel_data`, que los asocia con el equipo, las sesiones, los canales y las unidades de medida:

| Campo             | Tipo                             | Descripción                                               |
| ----------------- | -------------------------------- | --------------------------------------------------------- |
| `id`              | `bigint`                         | Identificador único del registro (clave primaria).        |
| `equipment_id`    | `bigint`                         | Referencia al equipo (`equipment.id`).                    |
| `seance_id`       | `bigint`                         | Referencia a la sesión (`seances.id`).                    |
| `channel_id`      | `bigint`                         | Referencia al canal (`channels.id`).                      |
| `unit_id`         | `bigint`                         | Referencia a la unidad de medida (`units.id`).            |
| `archive_type_id` | `integer`                        | Referencia al tipo de archivo (`referenceparameters.id`). |
| `event_time`      | `integer`                        | Momento del evento (p. ej. marca de tiempo).              |
| `value`           | `character varying(100)`         | Valor recibido del canal.                                 |
| `created_at`      | `timestamp(6) without time zone` | Momento en que se creó la entrada.                        |
| `updated_at`      | `timestamp(6) without time zone` | Momento de la última actualización de la entrada.         |

Donde:

- `equipment_id`: Identificador único del equipo.
- `seance_id`: Identificador único de la sesión.
- `channel_id`: Identificador único del canal.
- `unit_id`: Identificador único de la unidad de medida.

Cuando los datos de distintos dispositivos se almacenan en un repositorio central:

- los datos se convierten a un único formato y estructura;
- se almacenan en la tabla de datos unificados `channel_data`.

## Unificación semántica

Todos los datos tienen el mismo significado e interpretación en todos los sistemas.

Por ejemplo:

- Todas las marcas de tiempo están en formato `UTC`. Esto se implementó en la etapa de diseño del sistema.
- Todos los sistemas usan las mismas unidades de medida (p. ej. grados Celsius).

Para unificar las unidades de medida, se añadió al sistema el modelo Units. Almacena las unidades de medida utilizadas para los datos de canal.

| Campo               | Tipo                             | Descripción                                          |
| ------------------- | -------------------------------- | ---------------------------------------------------- |
| `id`                | `bigint`                         | Identificador único del registro (clave primaria).   |
| `name`              | `character varying(30)`          | Nombre de la unidad de medida.                       |
| `varname`           | `character varying(30)`          | Nombre de variable abreviado de la unidad de medida. |
| `description`       | `character varying(100)`         | Descripción de la unidad de medida.                  |
| `conversion_factor` | `double precision`               | Factor de conversión de la unidad de medida.         |
| `rounding`          | `smallint`                       | Número de decimales a los que redondear.             |
| `synonyms`          | `character varying[]`            | Matriz de sinónimos de la unidad de medida.          |
| `created_at`        | `timestamp(6) without time zone` | Momento en que se creó la entrada.                   |
| `updated_at`        | `timestamp(6) without time zone` | Momento de la última actualización de la entrada.    |

## Normalización de datos

El modelo de datos del sistema se reduce a la forma normal de Boyce-Codd (tercera) en lo que respecta a los valores atómicos (escalares). Algunas entidades del modelo de datos emplean estructuras compuestas para optimizar el trabajo con atributos infrecuentes y no estándar.

Los datos se dividen en tablas lógicas (`equipment`, `channels`, `units`, `sessions`), lo que elimina la redundancia y la duplicación.

Por ejemplo:

- La tabla `channel_data` hace referencia a las tablas `equipment`, `channels`, `units` y `sessions` mediante claves foráneas.

## Uso de los datos unificados

Los datos unificados pueden utilizarse para análisis, visualización, aprendizaje automático y otras tareas.

### Análisis de datos mediante 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
```

### Consulta de datos a través de la API REST

Ejemplo de solicitud:

```bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Ejemplo de respuesta:

```json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```
