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:
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, intCamas) strID_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_SAL) Con 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:
No hay comentarios:
Publicar un comentario