Si alguna vez leíste o escuchaste sobre el diseño de bases de datos entonces seguramente sabes lo que es la normalización: evitar la redundancia y proteger la integridad de los datos.

El tener las tablas normalizadas permite escribir menos y disminuir la probabilidad de tener errores en los datos grabados.

Eso está muy bien, es lo correcto, sin embargo cuando lo que queremos no es grabar datos sino utilizarlos lo mejor casi siempre es denormalizarlos.

¿Por qué?

Porque entonces en una sola fila tenemos todos los datos que necesitamos.

Ejemplo:

Tenemos la tabla SUCURSALES (normalizada) que tiene estos datos:

NORMAL1

Captura 1. Si haces clic en la imagen la verás más grande

Y la tabla CLIENTES (también normalizada) que tiene estos datos:

NORMAL2

Captura 2. Si haces clic en la imagen la verás más grande

 Como puedes ver, en la tabla CLIENTES no se guarda el nombre de cada Sucursal sino el código de la misma.

Denormalizando la consulta:

Ahora, queremos una consulta donde tengamos el nombre de la sucursal de cada cliente. Podríamos escribir algo así:

SELECT
   C.CLI_CODSUC,
   S.SUC_NOMBRE,
   C.CLI_IDENTI,
   C.CLI_NOMBRE
FROM
   CLIENTES C
JOIN
   SUCURSALES S
      ON C.CLI_CODSUC = S.SUC_CODIGO

Y obtendríamos algo así:

NORMAL3

Captura 3. Si haces clic en la imagen la verás más grande

 Donde podemos ver los nombres de las sucursales que les corresponden a los clientes, por lo tanto esta consulta no está normalizada.

Grabar esos datos así como vemos en la imagen superior sería una pésima idea pero si lo que queremos es consultarlos entonces está perfecto.

Al denormalizar la consulta, el resultado obtenido es mucho más entendible.

Artículo relacionado:

El índice del blog Firebird21

Anuncios