Principios Fundamentales de Normalización, Acoplamiento y Cohesión en el Diseño de Sistemas

Normalización de Bases de Datos

La normalización es un proceso durante el cual los esquemas de relación insatisfactorios se descomponen, repartiendo sus atributos entre esquemas de relación más pequeños que poseen propiedades deseables. El objetivo principal es garantizar que no ocurran anomalías de actualización, las cuales incluyen:

  • Anomalías de inserción
  • Anomalías de eliminación
  • Anomalías de modificación

Atributo Primo y No Primo

En una relación R, un atributo es primo si es miembro de cualquier clave candidata de R. Un atributo es no primo si no es miembro de ninguna clave candidata.

Acoplamiento (Coupling)

El acoplamiento es una medida del grado de interdependencia entre los módulos de un sistema. Es deseable tener módulos con bajo acoplamiento. Buscaremos la independencia de los módulos por los siguientes motivos:

  1. Para que los errores de un módulo no puedan propagarse a otros módulos. A esto se le llama atenuar el ruido del sistema o ausencia del efecto ola.
  2. Para realizar el mantenimiento de un módulo teniendo que cambiar o modificar el mínimo número de otros módulos.
  3. Para poder modificar un módulo sin tener que analizar otros módulos.

Conclusión: El acoplamiento es óptimo cuando es bajo.

Datos Vagabundo

Definición: Decimos que en un diagrama de estructura aparecen datos vagabundo cuando hay datos que viajan por gran parte del mismo sin ser utilizados en la mayoría de los módulos que atraviesan. Estos datos suelen responder al esquema de acoplamiento normal. Su aparición suele indicar una mala organización de los módulos, por lo que es deseable la eliminación de tales datos.

Cohesión (Cohesion)

La cohesión evalúa la calidad de un diseño desde el punto de vista de la relación entre sus elementos (instrucciones, declaraciones de datos, llamadas a otros módulos, etc.). Es decir, indica la conexión funcional de estos elementos. Es deseable un alto nivel de cohesión.

Podríamos definir la cohesión como una medida de la fuerza de la relación funcional entre los elementos de un módulo. Los elementos de un módulo son partes del código que realizan algún trabajo o que definen algún dato, a saber:

  • Instrucciones o grupo de instrucciones
  • Definiciones de datos
  • Llamadas a otros módulos

El acoplamiento y la cohesión están fuerte e inversamente relacionados. Por lo tanto, la dirección para las mejoras es clara: es mejor que el acoplamiento disminuya si la cohesión aumenta.

Cohesion

Tipos de Cohesión

Cohesión Funcional (C. Funcional)

Se da en aquellos módulos que contienen elementos que contribuyen a realizar una única tarea. El nombre del módulo debe indicar estrictamente la función que realiza, lo cual permite una reutilización total de los módulos sin necesidad de analizar su interior.

Cohesión Secuencial (C. Secuencial)

La tienen aquellos módulos cuyos elementos están envueltos en tareas donde la salida de cada elemento es la entrada del siguiente.

Cohesión Comunicacional (C. Comunicacional)

Este tipo de cohesión se da en módulos con actividades que comparten los mismos datos de entrada o de salida (no es necesario que se los pasen entre sí). En muchos casos, un módulo con cohesión comunicacional puede ser dividido en módulos con cohesión funcional.

Cohesión Procedural (C. Procedural)

Decimos que un módulo tiene cohesión procedural si sus elementos realizan diferentes actividades, en principio sin relación aparente, pero en las que el control pasa de unas a otras ordenadamente. Dicho orden no está forzado lógicamente, sino que podría cambiarse. Las actividades no comparten datos; tan solo las relaciona el flujo de control.

Cohesión Temporal (C. Temporal)

La presentan aquellos módulos cuyos elementos están relacionados por una coincidencia temporal. Estos elementos suelen pertenecer a diferentes funciones. Un ejemplo típico de este tipo de cohesión serían aquellos módulos en los que se sitúa la inicialización o la terminación de tareas.

Diferencia clave: En la cohesión procedural hay un orden explícito en el flujo de control, mientras que en la cohesión temporal el orden es solo por coincidencia de tiempo.

Cohesión Lógica (C. Lógica)

La presentan aquellos módulos cuyas tareas pueden agruparse en una misma categoría general. Estas tareas suelen poder activarse cuando se invoca el módulo, a menudo mediante un parámetro de control.

Cohesión Coincidental (C. Coincidental)

Es presentada por aquellos módulos cuyos elementos contribuyen a diferentes tareas sin relación apreciable.


Formas Normales (FN)

1ª Forma Normal (1FN)

Se definió para prohibir los atributos multivaluados. Los dominios de los atributos deben incluir solo valores atómicos (simples o indivisibles). El valor de un atributo en una tupla debe ser un valor individual proveniente del dominio del atributo.

2ª Forma Normal (2FN)

Definición: Una dependencia funcional es total (X → Y) si la eliminación de cualquier atributo A de X hace que la dependencia deje de ser válida. Es parcial si la eliminación de A de X hace que siga siendo válida.

Una relación R está en 2FN si está en 1FN y todo atributo no primo depende totalmente de cada clave candidata.

Truco: Si solo hay un atributo en la izquierda de la dependencia funcional, siempre se cumple la 2FN respecto a esa dependencia.

Ejemplo: R(T, A, D, E). F = {TA → D, TD → E}. Claves: {TA}.

3ª Forma Normal (3FN)

Definición de Dependencia Transitiva: Una dependencia X → Y es transitiva si existe un conjunto de atributos Z que no sea un superconjunto de cualquier clave de R, y se cumple X → Z y Z → Y.

Definición de 3FN: Un esquema relacional R está en 3FN si, siempre que una dependencia X → A se cumple en R, se verifica al menos una de las siguientes condiciones:

  1. X es una superclave de R.
  2. A es un atributo primo de R.

Ejemplo: R(D, C, P). F = {DC → P, P → C}. ¿Está en 3FN?

  • Claves candidatas: {DC}, {DP}.
  • Dependencia P → C: P no es superclave. C es atributo primo (miembro de {DC} y {DP}). → Cumple 3FN.

Forma Normal Boyce-Codd (FNBC)

Un esquema relacional R está en FNBC si para toda dependencia funcional no trivial X → A (donde A no es subconjunto de X) que se cumple en R, se verifica que X es una clave o superclave de R.

Ejemplo: AL(DNI, Nombre, Telf, Ciudad). F = {DNI → Nombre, DNI → Telf, DNI → Ciudad}. Clave: {DNI}.

Como DNI es superclave, la relación está en FNBC.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.