BASES DE DATOS RELACIONALES
En este apartado se realizará el diseño e implementación de una pequeña base de
datos que guarde información de pacientes que ingresan en un hospital. En este
hospital, los pacientes que llegan al servicio de urgencias del hospital son examinados
y, dependiendo de su estado de salud, son ingresados en la planta correspondiente
(traumatología, cuidados intensivos, ...) bajo la supervisión de un médico responsable.
Para este ejemplo se llevarán a cabo las tres etapas de diseño de bases de datos
(diseños conceptual, lógico y físico) teniendo en cuenta la especificación anterior. La
implementación se realizará en el SGBDR Access. Además de la especificación del
esquema, se impondrán restricciones de integridad sobre él.
1. Diseño conceptual
En este apartado se muestran las dos primeras etapas (diseño conceptual y diseño
lógico) del diseño de bases de datos relacionales.
1.1. Identificación de entidades
La entidad que surge inmediatamente es Pacientes. Otras entidades posibles son
Médicos e Ingresos. La primera se refiere a los médicos que son responsables de los
pacientes y la segunda al ingreso en el hospital.
Las entidades modelan en general tanto objetos y personas (pacientes y médicos)
como acciones (ingresos).
Podrían surgir las siguientes preguntas
• ¿Por qué no eliminar Médicos y hacer que forme parte como atributos de Pacientes?
Como un médico será responsable en general de varios pacientes, repetir la
información del médico para cada paciente no es buena idea.
• ¿Por qué no eliminar Ingresos y hacer que forme parte como atributos de
Pacientes? Un paciente puede ingresar varias veces en el hospital y tener asignado
en cada ocasión diferentes médicos, con lo que nos encontraríamos con atributos
multivalorados.
1.2. Identificación de atributos
A cada tipo de entidad se le debe asignar tantos atributos como sea necesario en la
especificación del problema.
• Entidad Pacientes:
Número de Seguridad Social.
Nombre del paciente.
Apellidos del paciente.
Domicilio.
Población.
Provincia
Código postal.
Número de teléfono.
Número de historial clínico.
Observaciones
• Entidad Ingresos:
Procedencia.
Fecha de ingreso.
Número de planta.
Número de cama.
Observaciones
• Entidad Médicos:
Código de identificación del médico.
Nombre.
Apellidos.
Especialidad.
Número de colegiado.
Cargo.
Observaciones
¿Por qué no poner un atributo Nombre del hospital? Es una información implícita.
1.3. Identificación de relaciones
Por una parte tenemos pacientes que realizan ingresos y, por otra, médicos que
atienden a pacientes. Según esto aparecen dos relaciones: Realiza: Pacientes ×
Ingresos y Atiende: Ingresos × Médicos. Ninguna de ellas tiene atributos asociados
1.4. Identificación de restricciones
1.4.1. Restricciones de clave primaria para las entidades En las
entidades Pacientes y médicos parece claro: • Entidad Pacientes: Número
de historial clínico.
• Entidad Médicos: Código de identificación del médico.
Sin embargo, en la entidad ingresos hay varios atributos que, aisladamente, no
parecen formar clave. El ingreso depende de un paciente en concreto, por lo que esta
entidad debería guardar información de a qué paciente corresponde. De hecho, se
trata de un tipo de entidad conocida como débil, que debería tomar prestado el
atributo clave de Pacientes para formar clave. Pero no es suficiente, es necesario
añadir al menos la fecha en que ingresó el paciente. Pero, ¿qué ocurre si el paciente
ingresa dos veces en el mismo día? Habría que añadir otro atributo, como la hora,
para indicarlo. En la práctica, se elige muchas veces usar un nuevo atributo sin
significado que sirva únicamente para identificar unívocamente a las entidades. En
este caso usaremos un atributo denominado ID (de identificador).
• Entidad Ingresos: ID
1.4.2. Restricciones de cardinalidad
• Relación Realiza:
• Pacientes -1- Realiza - Ingresos: Un ingreso sólo corresponde a un paciente.
• Pacientes - Realiza -N- Ingresos: Un paciente puede sufrir varios ingresos.
• Relación Atiende:
• Médicos -1- Atiende - Ingresos: Un ingreso sólo es atendido por un médico.
• Médicos - Atiende -N- Ingresos: Un médico puede atender varios ingresos.
1.5. Diagrama E-R
Con la información identificada anteriormente se puede llegar al siguiente diagrama
entidad-relación, en el que no se muestran los atributos que no sean clave para
simplificar el dibujo.
Pacientes Realiza Ingresos Atiende Médicos
Número de Código de
historial clínico identificación del
ID médico
2. Diseño lógico
2.1. Traducción de tipos de entidades y relaciones
Tablas procedentes de los tipos de entidades del esquema E-R:
• Pacientes(Número de Seguridad Social, Nombre del paciente, Apellidos del
paciente, Domicilio, Población, Provincia, Código postal, Número de teléfono,
Número de historial clínico, Observaciones)
• Ingresos(ID, Procedencia, Fecha de ingreso, Número de planta, Número de cama,
Observaciones)
• Médicos(Código de identificación del médico, Nombre, Apellidos, Especialidad,
Número de colegiado, Cargo, Observaciones)
Tablas procedentes de los tipos de relaciones del esquema E-R:
• Realiza(Número de historial clínico, ID). En esta tabla, la clave es ID porque se
trata de una relación una a varias (la parte una corresponde a Pacientes y la parte
varias a Ingresos).
• Atiende(Código de identificación del médico, ID). En esta tabla, la clave es ID
porque se trata de una relación una a varias (la parte una corresponde a Médicos
y la parte varias a Ingresos).
2.2. Simplificación del esquema
Observando cómo queda el diseño, se puede simplificar gracias a que las relaciones
que aparecen son de una a varias, e incluir esta información en la tabla Ingresos. Para
la relación Realiza, incluimos el atributo Número de historial clínico en Ingresos, de
forma que a cada ingreso le va a corresponder un paciente en concreto y sólo uno. De
igual forma, para la relación Atiende, incluimos el atributo Código de identificación del
médico en Ingresos, de forma que a cada ingreso le va a corresponder un médico en
concreto y sólo uno. Esta técnica es habitual cuando nos encontramos relaciones una
a varias.
Por lo tanto, el esquema simplificado es:
• Pacientes(Número de Seguridad Social, Nombre del paciente, Apellidos del
paciente, Domicilio, Población, Provincia, Código postal, Número de teléfono,
Número de historial clínico, Observaciones)
• Ingresos(ID, Procedencia, Fecha de ingreso, Número de planta, Número de cama,
Observaciones, Número de historial clínico, Código de identificación del médico)
• Médicos(Código de identificación del médico, Nombre, Apellidos, Especialidad,
Número de colegiado, Cargo, Observaciones)
2.3. Restricciones de integridad
En este ejemplo se retrasa la definición de las restricciones de dominio hasta la
realización de la práctica.
Según el enunciado del problema no parece que se puedan definir dependencias
funcionales en ninguna de las tablas, por lo que se encuentran en la mejor forma
normal que podamos exigir y no tiene sentido la normalización.
Sin embargo, sí es posible imponer restricciones de integridad referencial, observando
que los atributos añadidos a Ingresos resultados de la simplificación provienen de
tipos de entidades, y sabemos que debemos imponerlas para tales atributos. En
concreto, el valor del campo Número de Seguridad Social de Ingresos lo debemos
encontrar en Pacientes, así como el valor del campo Código de identificación del
médico lo debemos encontrar en Médicos. La siguiente figura muestra esta situación.
En ella también se pueden observar las restricciones de cardinalidad una a varias que
se han detectado entre esas entidades. (Con 1 se indica la parte una de la restricción
y con ∞ se indica la parte varias).
3. Diseño físico
En este apartado se muestra el diseño físico del ejemplo del hospital usando el
SGBDR (sistema gestor de bases de datos relacionales) Access.
3.1. Definición de los campos
Los tipos de campo, así como la definición de su tamaño (como se verá a
continuación) permiten definir las restricciones de dominio que se refieren al tamaño y
al tipo de los datos de un campo. Las reglas de validación ubicadas en las
propiedades de los campos permiten especificar otras restricciones de dominio que
limitan los valores del campo (por ejemplo, que no se admitan números negativos).
Para cada campo es posible especificar que no contenga valores nulos (es decir,
imponer como restricción de dominio la eliminación del valor NULL del dominio del
campo). También es posible especificar que si se trata de una cadena de caracteres,
ésta no sea vacía.
Más adelante, cuando se estudien las propiedades de las tablas, se verá que también
es posible especificar restricciones de dominio en función de valores de otros campos,
es decir, restricciones en el contexto de la tabla.
A continuación se estudiará cómo se realiza la definición de los campos.
3.1.1. Nombre de los campos
Deben estar identificados por nombres únicos dentro del contexto de la base de datos.
Pueden tener hasta 64 caracteres con caracteres especiales y espacios en blanco
(nunca al principio), pero no puntos, signos de exclamación o corchetes.
3.1.2. Tipos de campos
La siguiente figura muestra los tipos de campos disponibles. El tipo Texto permite
datos de hasta 255 caracteres. El tipo Memo admite datos de hasta 65535 caracteres,
pero tiene algunas limitaciones con respecto al anterior como, por ejemplo, que no se
pueden crear claves sobre ellos. El tipo Numérico alberga datos numéricos tanto
enteros como fraccionarios y números en coma flotante. El tipo de datos Fecha/Hora
admite una representación conjunta para fechas y horas como un número fraccionario
que el sistema interpreta como fechas y horas y del que se puede extraer información
de fechas y horas independientemente. El tipo Moneda se usa para datos relativos a
cantidades monetarias. El tipo Autonumérico es un tipo que asigna automáticamente
un valor único e identificador a los campos con este tipo (se usa a menudo para crear
claves primarias). El tipo Sí/No es un tipo lógico con dos únicos posibles valores. El
tipo Objeto OLE se usa para albergar imágenes, documentos y otros, con capacidad
hasta 1 GB. El tipo Hipervínculo se usa para albergar hipervínculos. Finalmente, el
tipo Asistente para búsquedas permite definir los posibles valores que puede tener un
campo de forma que el usuario pueda elegir valores de una lista predefinida.
3.1.3. Propiedades de los campos
Además del tipo de campo, es posible especificar otras propiedades de los campos
(véase la siguiente figura), como su tamaño. Con el tamaño se consigue restringir aún
más el tipo de campo para que concuerde con nuestras necesidades.
No todos los tipos admiten expresar un tamaño de campo. Algunos tipos tienen un
tamaño predeterminado que no se puede modificar. A continuación se muestra el
tamaño y rango de estos campos:
Tamaño y rango de valores almacenados en los campos numéricos según el tipo
Tipo Valores almacenados Tamaño Número de
decimales
Byte 0-255 1 byte 0
Entero -32768, 32767 2 bytes 0
Entero largo -2.147.483.648, 2.147.483.647 4 bytes 0
Simple -3,402823E38, 3,402823E38 4 bytes 7
Doble -1,79769313486232E308, 8 bytes 15
(predeterminado) 1,79769313486232E308
Id. de réplica Identificador global único 16 bytes N/A
Otra propiedad que se puede especificar es el formato, que especifica la forma en que
se muestran los datos. Hay formatos estándar para determinados campos, como los
numéricos y monetarios, como se muestra en las tres tablas siguientes. No obstante,
es posible especificar un formato personalizado como se verá a continuación.
Tipos de formatos estándar para los campos numéricos o monetarios
Formato Descripción
Número general (predeterminado) El número como se ha introducido
Moneda Separador de miles, rojo para negativos,
paréntesis y 2 cifras decimales
Fijo Redondea al número más próximo según
la propiedad Lugares decimales
Estándar Separador de miles y 2 cifras decimales
Porcentaje Porcentaje con 2 decimales
Científico Notación científica estándar
Tipos de formatos estándar para los campos Fecha/Hora
Tipo Elemento de fecha u hora
Fecha general (predeterminado) 3/4/96 o 05:34 PM
Fecha larga Jueves, 4 de abril de 1997
Fecha mediana 03-Abr-97
Fecha corta 3/4/97
Hora larga 5:34:23 PM
Hora mediana 05:34 PM
Hora corta 17:34
Tipos de formato para los campos Sí/No
Formato Valor equivalente
Sí/No (predeterminado) No = 0
Sí = -1
Verdadero/Falso Falso = 0
Verdadero = -1
Activado/Desactivado Desactivado = 0,
Activado = -1
La siguiente tabla recoge los símbolos especiales que se pueden usar para crear
formatos definidos por el usuario para los tipos de datos Texto y Memo.
Símbolos para crear formatos definidos por el usuario para los tipos de datos Texto y
Memo
Símbolo Descripción
@ Se requiere un carácter de texto (o un
espacio)
& No se requiere un carácter de texto
< Pone todos los caracteres en minúsculas
> Pone todos los caracteres en mayúsculas
Caracteres admitidos para crear una máscara de entrada
Carácter Descripción
0 Dígito
9 Dígito o espacio
# Dígito o espacio (opcional)
L Letra
? Letra (opcional)
A Letra o dígito
a Letra o dígito (opcional)
& Cualquier carácter
C Cualquier carácter (opcional)
.,:;-/ Marcador de posición
< Minúsculas
> Mayúsculas
! Máscara de derecha a izquierda
\ Escape (carácter literal)
3.1.4. Reglas de validación de los campos: asertos
Las reglas de validación permiten especificar asertos que deben cumplirse para todos
los valores de los campos. Estas reglas llevan asociado un texto de validación que
permite informar al usuario del motivo por el que el contenido de un campo es
incorrecto. Por ejemplo, la regla de validación puede ser >=0 (mayor o igual que cero)
y el texto "El coste del tratamiento debe ser positivo".
3.1.5. Valores nulos
La propiedad Requerido de un campo, si se establece a Sí, impide la inserción de
valores nulos en los campos.
3.1.6. Índices
Se pueden construir índices sobre campos aislados de una tabla o sobre un conjunto
de ellos. Para construir un índice sobre un campo en concreto se indica en la
propiedad Indexado el tipo de indexación que se desea. Se permiten índices con o sin
valores duplicados. Un índice sin duplicados sobre un campo equivale a la
especificación de una clave candidata.
3.2. Propiedades de las tablas
Son propiedades que se aplican a todos los campos de la tabla. La primera,
Descripción, sólo es un texto indicativo de la tabla que aparece cuando se selecciona
la tabla (de forma parecida a la columna Descripción del campo). En la propiedad
Regla de validación se permiten expresar restricciones de dominio en términos de
otros campos de la misma tabla. La propiedad Filtro permite especificar un filtro que
descarta para la visualización los registros que no cumplan la condición del filtro. Esta
condición sigue la misma sintaxis que la condición de la cláusula WHERE en el
lenguaje SQL (se estudiará más adelante). La propiedad Ordenar por permite indicar
el criterio de ordenación de los registros indicando los campos por los que se ordenará
en indicando si la ordenación es ascendente o descendente. Su sintaxis es:
Campo1 [DESC], ..., Campo N [DESC]
Indica que los registros se ordenarán primero según el campo 1 de forma ascendente
si no se especifica DESC, en cuyo caso será descendente, luego por el campo 2, y así
hasta el campo N.
3.3. Creación de las tablas de la base de datos Hospital
En este apartado se crearán las tablas de la base de datos Hospital, con la estructura
(esquema) que se indica a continuación:
• Tabla Pacientes
Estructura de la tabla Pacientes
Tipo de
Nombre del campo Descripción Tamaño
campo
Texto Número de afiliación del 15
Número de Seguridad
paciente a la Seguridad
Social
Social
Nombre del paciente
Nombre del paciente Texto 25
ingresado en el hospital
Apellidos del paciente
Apellidos del paciente Texto 40
ingresado en el hospital
Domicilio Texto Domicilio habitual: calle, 50
número y piso
Municipio del domicilio
Población Texto 25
habitual
Provincia del domicilio
Provincia Texto 15
habitual
Código postal Texto Código postal 5
Número de teléfono Texto Teléfono de contacto 12
Campo
Número de historial clínico clave
Número de historial clínico Texto 6
del paciente
Datos referentes al
Observaciones Memo N/A
paciente
Para crear esta tabla hay que seguir los siguientes pasos:
1. Iniciar Access.
2. Seleccionar Nuevo en el botón de inicio.
3. Seleccionar una carpeta, por ejemplo, Mis Documentos, y escribir el nombre de la
base de datos: Hospital.accdb (.accdb son siglas de Access Database, es decir,
Base de datos de Access) y pulsar Crear.
4. Aparece Tabla1 en Vista Diseño.
5. Cada fila corresponde con un campo y se deben establecer sus características
(nombre, tipo, descripción, ...) como se indica en la tabla anterior.
El campo que se desee agregar se coloca donde indica el selector ( ). Si se desea
desplazarlo se puede arrastrar con el ratón. Si se desea insertar o eliminar un campo
se puede hacer con los botones de la barra de herramientas Insertar filas o Eliminar
filas , o bien, seleccionar el campo y con el botón derecho del ratón seleccionar
la operación.
Para Nombre del campo y Descripción se escriben los textos correspondientes; para
Tipo de datos se selecciona el tipo de datos adecuado.
6. Establecer como clave el campo Número de historial clínico. Para ello se
selecciona el campo (pulsándolo con el ratón) y después se pulsa el botón Clave
principal ( ).
• Tabla Médicos
Estructura de la tabla Médicos
Nombre del campo Tipo de Descripción Tamaño
campo
Código de identificación del Texto Código de identificación del 4 Campo
médico médico responsable clave
Nombre Texto Nombre del médico 25
Apellidos Texto Apellidos del médico 40
Especialidad Texto Especialidad del médico 20
Número de colegiado del 5 • Tabla
Número de colegiado Texto Ingresos
médico
Cargo Texto Cargo que ocupa en el 20
hospital
Observaciones Memo N/A
Datos referentes al médico
Estructura de la tabla Ingresos
Nombre del campo Descripción Tamaño
Tipo de campo
Número de historial Texto Número de historial clínico 6
clínico del paciente
Procedencia (con P10) Sí/No Enviado por el médico de N/A Campo
cabecera (Sí o No) clave
Fecha de ingreso Fecha/Hora Fecha de ingreso en el N/A
hospital
Código de identificación Texto Código de identificación del 4 3.4.
del médico médico responsable
Número de planta Texto Número de planta en la 2
que se ingresa
Número de cama Texto Número de cama que 4
ocupa
Observaciones Memo Datos referentes a N/A
condiciones de ingreso
ID Autonumérico N/A
Relaciones entre las tablas de la base de datos Hospital
En este apartado se definirán las relaciones que existen entre las tablas de esta bd de
ejemplo. En concreto se definirán el tipo de relación según su cardinalidad (una a una,
una a varias o varias a varias) y las restricciones de integridad referencial.
Con respecto al tipo de relación hay que tener unas consideraciones en mente:
• Cuando se establece una relación de uno a varios, el campo común de la primera
tabla debe estar definido como clave principal.
• Los tipos de datos y propiedades de los campos que relacionan las tablas deben
ser iguales en ambas.
Con respecto a la integridad referencial hay que tener presente:
• La segunda tabla de la relación uno a varios debe contener datos que estén
relacionados con algunos datos de la primera tabla.
Por ejemplo, existe una restricción de integridad referencial entre Pacientes e
Ingresos, de manera que no se pueda dar de alta un ingreso si no existe previamente
un paciente.
3.4.1. Definición de las relaciones
1. Hay que cerrar todas las ventanas abiertas y pulsar el botón relaciones ( ).
2. Con la tecla Ctrl pulsada, seleccionar las tres tablas y pulsar el botón Agregar.
3. Seleccionar el campo Número de historial clínico de la tabla Pacientes y arrastrarlo
hasta alcanzar el campo del mismo nombre de la tabla Ingresos. Aparecerá el
cuadro de diálogo Relaciones.
4. Marcar la casilla Exigir integridad referencial y pulsar Crear.
5. Repetir la operación con el campo Código de identificación del médico de la tabla
Médicos y el campo de mismo nombre de la tabla Ingresos.
3.5. Operaciones con las tablas
3.5.1. Introducción de datos
Para introducir datos hay que seleccionar la tabla en la que se desean añadir registros
y pulsar el botón Abrir. Aparece la vista Hoja de datos en la que se pueden introducir
los datos.
Sin embargo, al hacer esto en general no se ven los nombres completos de los
campos y aparecen sólo unos cuantos campos.
Para resolverlos se puede personalizar la vista Hoja de datos de varias formas:
• Ajuste de la anchura del campo.
• Ocultación de columnas. Permite ocultar las columnas que no se necesiten
en un momento dado.
• Inmovilización de columnas. Permite inmovilizar una columna de forma que
siempre se muestre en pantalla independientemente de si nos
desplazamos a izquierda o derecha con las barras de desplazamiento
3.5.2. Modificación de la estructura
En este apartado se modificará la estructura de la base de datos Hospital. Esta
modificación se puede realizar en cualquier momento y los datos que puedan
conservarse permanecerán sin necesidad de volverlos a introducir.
Modificación de la estructura de la base de datos Hospital
Nombre del campo Tipo de campo Descripción Tabla
Fecha de nacimiento Fecha/Hora Fecha de nacimiento del paciente Pacientes
Sexo Sí/No Sí = Hombre; No = Mujer Pacientes
Documento Nacional de Texto (10 caracteres) Documento Nacional de Identidad Pacientes
Identidad
Coste del tratamiento Moneda Coste diario del tratamiento del Ingresos
paciente
Diagnóstico Texto (50 caracteres) Diagnóstico por el que ingresa el Ingresos
paciente
Fotografía Objeto OLE Fotografía del médico Médicos
Las tablas deben quedar como se muestra en las siguientes figuras.
BASE DE
DATOS
RELACIOMAL
Pacientes Realiza Ingresos Atiende Médicos
Número de Código de
historial clínico identificación del
ID médico
NOMBRE: QUISPE LECOÑA LIMBER SIXTO
CARRERA: INGENIERÍA CIVIL
PARALELO: “B”
MATERIA: PROGRAMACIÓN 1
DOCENTE: PAVEL ALEXEI TORRICO CAPRILES
FECHA: 31/05/2019