lunes, 3 de junio de 2013

Formas normales (ejemplo)

EJEMPLO SENCILLO


A Continuación un ejemplo sencillo de aplicación de las formas normales al diseño de una base de Datos relacional. Basado en el esquema de base de datos obtenido en el  punto anterior que era el siguiente:

Formas Normales (ejemplo)

Ahora vamos a continuar con el desarrollo del modelo adaptándolo para que cumpla las formas normales.

En Rojo la clave primaria.
En Azul las claves  ajenas


Paso a primera forma normal


Tabla: tbMedico (strId_MED, strId_HOS,  strNombre, strEspecialidad,)

Un médico puede pertenecer a varias especialidades o a varios hospitales por lo que
pasaría a descomponerse en :

tbMedico (strId_MED, strNombre)

tbMedHos(strId_MED, strId_HOS)

tbMedEsp(strId_MED, strEspecialidad)


Tabla: tbAtiende(strId_MED, strId_PAC)  está en 1FN

Tabla: tbPaciente(strId_PAC, strID_SAL, strId_HOS, strNombre, strDirección, dat_FecNacimiento)

Si consideramos que un paciente solo tiene una dirección válida y sólo puede tener asignada una sala, esta tabla estaría en 1FN.

Tabla: tbSala (strId_SAL, strId_HOS, intCamas,)  está en 1FN.

Tabla: tbHospital(strId_HOS, strNombre, strDireccion, strTelefono)

Para que el hospital pueda tener diversos números de teléfono se deja como:

tbHospital(strId_HOS, strNombre, strDireccion)

tbHospTel (strId_HOS, strTelefono)  No se contempla un listín telefónico por departamentos.

Paso a segunda forma Normal


En este ejemplo no se da ningún caso que esté en 1FN y no esté en 2FN por lo que podemos reordenar las claves dejándolo así.

tbMedico (strId_MED, strNombre)

tbMedEsp (strId_MED, strEspecialidad)

tbMedHos (strId_MED, strId_HOS)

tbAtiende (strId_MED, strId_PAC) 

 tbSala (strId_SAL, strId_HOS, intCamas,

tbPaciente (strId_PAC , strID_SAL, , strId_HOS, strNombre, strDirección, dat_FecNacimiento)

Que al tener sólo una clave primaria, está en 2FN.

tbHospital (strId_HOS, strNombre, strDireccion)

tbHospTel (strId_HOS, strTelefono) 

Paso a tercera forma Normal


El campo strEspecialidad de tbMedEsp depende transitivamente de strID_MED por tanto se sustituye por el código de la especialidad y se crea una nueva tabla tbEspecialidades

tbMedico (strId_MED, strNombre)

tbMedEsp (strId_MED, strId_ESP)

tbEspecialidades (strId_ESP, strEspecialidad)

Como en tbSala (strId_SAL, strId_HOS, intCamasstrID_HOS no depende de la Sala,
sacamos la relación a una tabla auxiliar. Quedando:
tbSala (strId_SAL, intCamas

tbSalaHos (strId_SAL, strId_HOS

Repitiendo la misma operación con tbPaciente nos queda

tbPaciente (strId_PAC , strNombre, strDirección, dat_FecNacimiento)

tbPacSala (strId_PAC , strID_SALCon esta información y la de tbSalaHos queda definido el hospital asignado al paciente.


Al no hacer claves complejas, llegados a este punto, también cumplen las FNCB formas normales por lo que finalmente tenemos:

Formas Normales (ejemplo)

No hay comentarios:

Publicar un comentario