8 de mayo de 2006

Redundancia Cero

El título de este post es, básicamente, el objetivo de todo buen programador de base de datos que se precie de serlo. Y hoy, concretamente, me ha venido a la mente una ligera reflexión al respecto de esa existencia de redundancia, de su inutilidad y utilidad, pero sobre todo de la a veces necesidad de que esta esté presente.

Por partes. Como el asunto redundancia cero (palabras que se van a repetir mucho en las próximas lineas) es un término bastante técnico, haré una breve explicación. Informáticamente hablando, una base de datos es un conjunto de tablas relacionadas entre sí por una o varias claves vinculantes. Cada una de estas tablas, a su vez, contiene campos de información organizados en registros individuales. De esta manera, cualquier tipo de información bien estructurada queda perfectamente organizada y, lo que es más importante, carece absolutamente de redundancia: la redundancia cero, el sueño de cualquier programador de base de datos. Por ejemplo, podemos tener una tabla de Trabajadores con una serie de datos: Identificador de trabajador, Nombre, Apellidos, Dirección, Teléfono, DNI, etc. A su vez, tenemos otra tabla de, por poner otro ejemplo, Incidencias de trabajador con otros datos: Fecha y hora, Identificador de informe de incidencia, Identificador de trabajador e Identificador de Incidencia. Con un simple número, un identificador de trabajador, ya hemos vinculado a una incidencia (porque un trabajador puede tener varias) a un informe de incidencias. A su vez, como acabo de decir, hay un identificador de incidencia, que nos vincula a una aparentemente existente Tabla de listado de incidencias. Se aplica lo mismo que acabo de decir con el identificador de cliente. Así, con estos identificadores relacionados entre sí entre n tablas, conseguimos en mayor o menor medida esa redundancia cero.

¿Parece complicado?. Pues imaginad, por un instante, que una base de datos se compone de digamos más de 100 tablas interrelacionadas entre sí por múltiples factores como el que acabo de exponer (que dicho sea, es la base de las bases de datos relacionales, su forma más sencilla). Está claro que en una tesitura de esas características, obtener la redundancia cero es una quimera, un imposible, algo que no se puede conseguir. Y si se puede, desde luego supone un auténtico prodigio de destreza mental, organizativa. Como diría Doc de Regreso al futuro, Hay que pensar en cuatro dimensiones.

Pongámoslo aún más difícil: digamos que las tablas principales de esta base de datos contiene, literalmente, millones y millones de registros. Digamos que te piden hacer estadísticas complicadísimas en base a esos millones de registros. Señores, es en este punto cuando la redundancia cero llega a su fin absoluto: por mucho que hayas trabajado en diseñar la base de datos perfecta en lo referente a redundancia de datos, te vas a ver obligado a crear una segunda base de datos con nuevas tablas y registros que, evidentemente, reunirán una serie de datos simplificados y optimizados, ya calculados, basados en la base de datos original. Un ejemplo claro: si tienes datos concretos de ciertos aspectos de un día, y en un solo día tienes casi 30.000 registros, eso hace que al mes tengas aproximadamente 900.000 registros. En un año, esto serían 10.800.000. En 4 años, esto serían 43.200.000. Y entonces resulta que necesitas datos resumidos de un mes concreto, comparándolo con los mismos datos del mes anterior y posterior. La cantidad de búsqueda y cálculos a realizar es realmente abrumador. Y si luego resulta que necesitas lo mismo para un año concreto en base a los datos mensuales, subimos aún más de nivel. ¡La cosa se complica!. Conclusión: hazte un resumen de los datos mensuales y guárdalos en otra parte, para que cuando te pidan los datos del año ya tengas todo calculado. Si bajamos al nivel más bajo, el coste de tiempo y rendimiento es extremo. Si lo tienes ya guardado en otra parte, el cálculo es inmediato. La cosa está clara, ¿no?. No, no lo está. Hemos sacrificado la redundancia cero en favor de una simplificación de la situación.

Oh, pero lo siento. Me temo que me he metido en una parafernalia extremadamente compleja y mareante. ¿Hbéis llegado hasta aquí leyendo?. ¡Enhorabuena!. Estoy seguro de que podéis aguantar un poco más.

Lo que he querido decir, en cristiano, es que la redundancia es en muchas ocasiones NECESARIA. No queda más remedio. Si nos limitamos al ámbito de la informática, todo se resume en que hay que ser lo menos redundante posible. Pero cualquier informático que se precie de serlo sabe que la redundancia cero solo existe en procesos simples. Y ahora vamos a ir más allá y vamos a aplicar esto mismo a la vida real, a lo visceral, a las emociones, al día a día de uno. ¿Existe mucha diferencia entre el ámbito informático y cualquier otro?. La experiencia me ha demostrado que no.

La informática es organizada, cuadrada, limitada, fría, indiferente, precisa. En ese aspecto no hay discusión posible: no se puede comparar (¿o sí?) con la vida real, y asimismo la programación es una colección de algoritmos matemáticos y lógicos estructurados. Os sorprendería saber cuánto se parece la lógica filosófica con la informática. Apenas se distinguen, son hermanas gemelas. Por eso tengo el atrevimiento de decir que estamos hablando, en general, siempre de lo mismo. Los ámbitos no existen, sólo cambia la naturaleza de los mismos.

Pero ya vuelvo a enredarme en tecnicismos y lo siento mucho, al fin y al cabo soy un animal de oficina encerrado en esos mismos algoritmos y no lo puedo evitar. Voy a llegar, ahora mismo, a una conclusión y, por tanto, establecer mi reflexión.

No existe la redundancia cero en la vida salvo en asuntos excesivamente simplistas. No hay verdades absolutas. Simplemente no existen. Y a veces, solo a veces, me da la impresión de que las personas nos negamos a nosotros mismos la creaciónn de una segunda base de datos en nuestra mente para simplificar los problemas y obtener conclusiones de esta, y en vez de eso tiramos de la raíz de dichos problemas, es decir, de la primera base de datos. Si somos capaces de asumir que la redundancia presente en nuestras vidas es algo necesario, podremos obtener soluciones mucho más rápidamente a todo, sea de mayor o de menor relevancia. ¿Podemos llegar a comprender la importancia de la presencia redudante?.

El exceso de redundancia es realmente malo. Hace que todas las cosas engorden innecesariamente. La carencia absoluta de la misma implica complicación excesiva e igualmente innecesaria. Conclusión: las personas nos encontramos en una lucha constante para optimizar nuestras ideas sin caer en la redundancia fácil. Pero muchas, muchísimas veces no queremos ver que la redundancia cero es IMPOSIBLE. Asumamos eso y nuestra vida será mucho más sencilla.

Un abrazo.

1 comentario:

Anónimo dijo...

Hace poco me dijeron lo siguiente, que me pareció muy bonito: "Chaval, estoy seguro que tú tienes partes nuevas por estrenar". Lo mismo digo aquí, estoy seguro que hay "bases de datos" nuevas por estrenar y escalas de valores por descubrir...