Parte II - Diseño Relacional
Parte II - Diseño Relacional
Parte II - Diseño Relacional
DISEÑO LÓGICO
Módulo: BASES DE DATOS
Curso: 2023-2024
INDICE DE CONTENIDOS
1. Introducción.
2. Elementos del modelo relacional
a. La relación.
b. Atributos y dominios.
c. Restricciones semánticas.
d. Claves.
3. Transformación al modelo relacional.
a. Transformación de atributos.
b. Transformaciones binarias.
i. Cardinalidad N:M.
ii. Cardinalidad 1:N
iii. Cardinalidad 1:1
c. Transformación Entidades débiles.
d. Transformación de Jerarquías.
e. Transformación de relaciones N-ARIAS.
4. Normalización.
a. Dependencias funcionales.
b. Formas Normales.
5. Recomendaciones de diseño y transformación.
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
1. Introducción
El modelo de datos relacional fue desarrollado por Edgar Frank Codd para IBM durante los años
setenta. Está basado en dos ramas de las matemáticas: la teoría de conjuntos y la lógica de predicados
de primer orden. Su base matemática hace que el modelo sea predecible, fiable y seguro.
Objetivos del modelo de Codd:
Independencia física de los datos, el modo de almacenamiento de los datos no debe influir en
su manipulación lógica.
Independencia lógica de los datos, los cambios que se realicen en los objetos de la base de
datos no deben repercutir en los programas y usuarios que acceden a la misma.
Flexibilidad, para presentar a los usuarios los datos de la forma más adecuada a la aplicación
que utilicen.
Uniformidad, en la presentación de las estructuras lógicas de los datos, que son tablas, lo que
facilita la concepción y manipulación de la base de datos por parte de los usuarios.
Sencillez, pues las características anteriores, así como unos lenguajes de usuario sencillos
hacen que este modelo sea fácil de comprender y utilizar por el usuario.
2.1.La relación.
Podemos ver una tabla como una hoja Excel donde los atributos son las columnas de la tabla
y los registros son las filas y el dato es el contenido de cada celda.
En una tabla no puede haber dos registros iguales (es obligatorio que haya una clave
primaria que diferencie a todos los registros y que haga de identificador único).
Ningún atributo que forme la clave primaria puede tener un valor nulo.
2 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
2.3.Restricciones semánticas.
Representan la semántica del mundo real, Condiciones que deben cumplir los datos para su
correcto almacenamiento. Hay varios tipos:
La restricción de unicidad (UNIQUE), permite definir claves alternativas, los valores de los
atributos no pueden repetirse. Declararemos estas restricciones con la abreviatura UK.
La restricción de clave primaria (PRIMARY KEY) identifica unívocamente cada registro de la
tabla. Puede estar formado por varios atributos. Declararemos esta restricción con la
abreviatura PK.
Ejemplo:
ALUMNOS (cod_alumno, nombre, apellidos, DNI, calle, ciudad, provincia, teléfono)
PK: cod_alumno.
UK: DNI.
Nota: no puede haber en la tabla de alumnos dos DNIs iguales.
Integridad referencial o restricción de clave ajena (FOREIGN KEY, FK), se utiliza para enlazar
relaciones, mediante claves ajenas, de una base de datos. La integridad referencial indica que
los valores de la clave ajena en la relación hijo se corresponden con los de la clave primaria en
la relación padre.
Ejemplo: tenemos dos tablas, ALUMNOS y MATRÍCULAS que relacionan los alumnos y
la información general de la matrícula del alumno:
ALUMNOS (cod_alumno, nombre, apellidos, DNI, calle, ciudad, provincia, teléfono)
PK (Primay Key): cod_alumno.
UK (Unique): DNI.
NOT NULL: teléfono.
MATRÍCULAS(cod_matricula, ciclo, curso, num_módulos, observaciones)
PK (Primay Key): cod_matricula.
NN(NOT NULL): ciclo, curso, num_módulos.
4 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Aserciones (ASSERTION), son parecidas a la anterior, pero en este caso en lugar de afectar a
una relación como CHECK, puede afectar a dos o más relaciones, en lugar de a un atributo.
Disparadores (TRIGGER). Las restricciones anteriores son declarativas, sin embargo, este tipo
es procedimental, el usuario podrá especificar una serie de acciones distintas ante una
determinada condición. El usuario escribe el procedimiento a aplicar dependiendo del
resultado de la condición.
2.4. Claves.
Superclave: Identifican a una entidad (pueden ser o no mínimas). Por ejemplo, para un
empleado, las superclaves posibles son el DNI, o el DNI+Nombre, o el DNI+Nombre+Numero
de la Seguridad Social, etc.
Clave Candidata: Es la mínima Superclave (en el caso anterior el DNI, o el Número de la
seguridad social).
Clave Primaria: Es la clave candidata elegida por el diseñador como clave definitiva (en el
ejemplo anterior se elegiría el DNI por ser la más representativa para un empleado).
Clave foránea: Es un atributo de una entidad, que es clave en otra entidad.
5 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Las claves candidatas (candidatas a ser clave primaria) son las mínimas:
o Cod_perro. (4 dígitos)
o Chip. (12 dígitos)
La Primaria sería la más óptima de las dos. En este caso que son las dos numéricas, elegimos
el más corto.
Otro ejemplo!!
PACIENTE_INGRESADO (DNI, nombre, apellidos, tlfno, tlfno_familiar_contacto, dirección,
fecha_nacimiento, cod_ingreso, nss, cod_paciente, núm_historia_clínica)
Dni: 8 caracteres alfanuméricos. Nombre: 20 caracteres. Apellidos: 40 caracteres.
Teléfonos: 11 caracteres alfanuméricos. Dirección: 60 caracteres alfanuméricos.
Fecha_nacimento: tipo fecha. Cod_ingres: 8 caracteres alfanuméricos. Nss: 12 dígitos.
Cod_paciente: 8 dígitos. Num_historia_clinica: 20 caracteres alfanuméricos.
Superclaves:
o DNI
o DNI+nombre+apellidos
o DNI+teléfno
o Nombre+apellidos+fecha_nto
o Cod_paciente
o Cod_paciente+nombre+apellidos
o Cod_ingreso
o Nss
o Num_historia_clinica
o Cod_ingreso+nombre+apellidos
o Nss+nombre+apellidos
o Num_historia_clinica+nombre+apellidos
Claves candidatas (las mínimas, candidatas a primaria):
o DNI
o Nss
o Cod_ingreso
o Cod_paciente
o Num_historia_clínica
Primaria (de las candidatas, la más óptima)
o Cod_paciente.
El resto de claves candidatas, se convierten en alternativas: DNI, Nss, cod_ingreso y
Num_historia_clínica.
6 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
3.1.Transformación de dominios.
Cuando nos encontramos con un atributo en una entidad del modelo entidad/relación con dominio
enumerado como el estado civil, hay que declarar una restricción de tipo CHECK al pasarlo al modelo
relacional de la siguiente forma:
3.2.Transformación de atributos.
Identificador principal: Dan lugar a los atributos de la clave primaria PRIMARY KEY.
Identificador alternativos Dan lugar a atributos con la restricción UNIQUE.
Atributos obligatorios: Dan lugar a atributos con la restricción NOT NULL.
Atributos optativos: Dan lugar a atributos con la restricción NULL.
Atributos compuestos: Dan lugar a tantos atributos como partes componen el atributo
compuesto.
Atributos multivaluados: Dan lugar a una nueva tabla (relación) cuya clave principal es la
concatenación de la clave primaria de la Entidad en la que se encuentra el atributo
multivaluado, y el nombre del atributo multivaluado.
Atributos derivados: Dan lugar a atributos cuyos valores se obtienen como resultado de
algún cálculo sobre otros atributos.
7 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Ejemplo:
Análisis de los atributos de PACIENTES:
Identificador:
Cod_paciente PRIMARY KEY
Identificadores alternativos:
N_seg_social y Dni
Compuestos:
NombreCompleto nombre, ape1, ape2.
Dirección calle, num, cp, población y provincia.
Calculados o derivados:
Edad = fecha_Actual – Fecha_nacimiento.
Multivalor:
Teléfonos que dará lugar a la siguiente tabla
TELEFONOS(Cod_paciente, telefno)
PK: Cod_paciente, teléfono
FK: Cod_paciente PACIENTES
PACIENTES (Cod_paciente, Dni, N_seg_social, nombre, ape1, ape2, calle, num, cp, ciudad, provincia, edad)
PK: Cod_paciente.
UK: Dni, N_seg_social
NN: nombre, ape1, ape2.. (los campos que consideremos obligatorios)
TELEFONOS(Cod_paciente, telefono)
PK: Cod_paciente, teléfono
FK: Cod_paciente PACIENTES
8 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
EMPLEADOS_SUPERVISAN_ZONAS(Letra, Codigo)
PK: (Letra, Codigo)
FK: Letra ZONAS(Letra), Codigo EMPLEADOS(Codigo)
CK: Letra in [“A..“Z”]
En el primer ejemplo la información que podríamos tener en las tablas (la que nos permite la clave
primaria) sería esta:
EMPLEADOS_SUPERVISAN_ZONAS
ZONAS
Letra Tipo_barco Num_barco Profundidad Ancho Letra Codigo
A Tipo1 20 2 6 A 100
Nota: Toda CLAVE EXTRANJERA (FK)
B Tipo1 15 2 6 B 100
C Tipo2 30 3 12 A 200
DEBE REFERENCIAR A UNA CLAVE
D Tipo2 15 3 12 B 200 PRIMARIA (PK) EN OTRA TABLA.
C 200 Cuando se trata de una clave primaria
EMPLEADOS D 300 SIMPLE (un solo atributo), podemos usar
Cod Nombre Dirección Telefono Especialidad C 300
la notación.
100 Ángel c. Alava… 111111111 Mto. C 400
9 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
En el segundo ejemplo, además queremos saber en qué fecha y turno tuvieron asignada una zona, la
información de la tabla sería esta:
EMPLEADOS
Cod Nombre Dirección Telefono Especialidad EMPLEADOS_SUPERVISAN_ZONAS
C Tipo2 30 3 12
D Tipo2 15 3 12
Como solo hay una entidad, en este caso se generan dos tablas:
la entidad y la relación.
BAILARINES(Nombre, Dni)
PK: Dni.
PAREJA_DE(Dni, Dni_pareja)
PK: Dni, Dni_pareja
FK: DniBAILARINES(Dni), Dni_parejaBAILARINES(Dni)
¡¡RAZONA!!
La academia no solo quiere saber con quién se emparejan los alumnos si no la fecha en lo que
lo hicieron. Los bailarines pueden repetir pareja en distintos días. ¿cómo cambiaría la
transformación?
¿Hay algún caso en el que la tabla PAREJA_DE pueda contener nulos? Dicho de otra forma,
¿algún caso en el que la clave foránea Dni_pareja pudiera ser NULA?
10 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
AMARRES
#num_amarre Lectura_agua Lectura_luz #Letra
1 15 1.10 A
2 35 0.8 A
3 12 0.4 A
ZONAS 10 15 0.9 B
Letra Tipo_barco Num_barco Profundidad Ancho 11 20 1.2 B
A Tipo1 20 2 6 23 23 4.0 C
B Tipo1 15 2 6 34 45 3.4 C
C Tipo2 30 3 12 35 67 1.7 C
(*) La clave foránea debe declararse NOT NULL con participación: (1,1) – (0,n) ó (1,n). En este
ejemplo, al ser la participación de ZONAS (1,1)-(1,n), estamos diciendo que todos los amarres
están obligatoriamente en una zona por lo que la clave foránea #letra en la tabla AMARRES
siempre tendrá un valor distinto de NULL.
Pero no siempre es así. Con participación (0,1) - (0,n), la clave foránea podría ser NULA y no
podemos declararla como NOT NULL. Veamos un ejemplo:
11 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
PREMIOS
cod Nombre Descripción DNI
EMPLEADOS 1 Emotive Motivación y moral en el trabajo 10D
DNI Nombre 2 Purpose Sentido del propósito en el 20B
trabajo
10D Ángel
3 Leal Lealtad en el trabajo 10D
20B Jose L
4 MaxVentas Ventas superiores al millón de NULL
30C Sergio euros.
40C Albano 5 Cartera Fidelización de 100 clientes en un NULL
año.
6 Empatía Empatia en entornos de trabajo. 30C
En este caso, se puede asumir que habrá campos NULOS en las tablas u optar por la solución B, una
traducción a TRES TABLAS.
PREMIOS
cod Nombre Descripción
EMPLEADOS 1 Emotive Motivación y moral en el trabajo
DNI Nombre 2 Purpose Sentido del propósito en el
trabajo
10D Ángel 3 Leal Lealtad en el trabajo
20B Jose L 4 MaxVentas Ventas superiores al millón de
EMPLEADOS_CONSIGUEN_ 30C Sergio euros.
PREMIOS 40C Albano 5 Cartera Fidelización de 100 clientes en un
#codigo DNI año.
1 10D 6 Empatía Empatia en entornos de trabajo.
2 20B
Esta transformación en cardinalidad 1:N es recomendable cuando la
3 10D
6 30C relación tiene muchos atributos y cuando se produce nulidad en claves
foráneas.
12 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
En relaciones de este tipo, se puede optar por la solución A y propagar la clave ó la solución
B creando una nueva tabla para la relación. Veámoslo con un ejemplo.
13 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Una relación 1:1 es un caso particular de una relación N:M, por lo que no hay una única forma
de transformación. Los criterios para aplicar una u otra transformación, depende de la participación:
a) Si las dos entidades que se asocian poseen cardinalidades (0,1) puede ser conveniente
transformarlo en una nueva tabla (relación), utilizando el identificador de uno de los extremos
como clave principal, y el otro como identificador alternativo.
MUJERES(#cod_mujer, nombre)
PK: #cod_mujer
HOMBRES (cod_hombre, Nombre)
PK: cod_hombre
MATRIMONIOS(cod_mujer, cod_hombre)
PK: cod_mujer
FK: cod_mujer MUJERES(cod_mujer),
Cod_hombre HOMBRES(cod_hombre)
NN: cod_hombre, cod_mujer
b) Si una entidad tiene cardinalidad (0,1) y la otra entidad tiene cardinalidad (1,1) conviene
propagar la clave de la entidad con cardinalidad (1,1) a la tabla resultante con cardinalidad
(0,1).
PROFESORES(cod_profesor)
PK: #cod_profesor
DEPARTAMENTOS(cod_dep, cod_profesor)
PK: cod_dep
FK: cod_profesor PROFESORES(cod_profesor),
NN, UK: cod_profesor
c) Si ambas entidades tienen cardinalidad (1,1) se puede propagar una de las dos entidades
sobre la otra como en el caso a. En este caso la clave ajena debe contener la cláusula NOT
NULL.
14 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Cualquier de las opciones vale. Dependerá de lo que sea más significativo a nivel semántico.
En este caso ((1,1)-(1,1)), se podría valorar hacer una transformación a una sola tabla. En el
caso de haya pocos atributos y que de la semántica del problema sea adecuada. Supongamos
el ejemplo de las taquillas pero en el entorno de los empleados: “Empleado tiene taquilla”.
Todos los empleados tienen una única taquilla y de estas no queremos guardar información
relevante, solo el número de taquilla que le corresponde a cada empleado. Podríamos
entonces, hacer esta transformación:
Aunque lo más conveniente es crear una tabla por cada entidad y proyectar claves.
Ejemplo:
a) Englobar todos los atributos de los tipos y de los subtipos en una sola entidad. Esta es una buena
solución cuando lo subtipos se diferencian en muy pocos atributos y no hay relaciones con las
entidades de los subtipos.
15 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
b) Crear la relación de tipo padre (supertipo) y tantas relaciones como hijos (subtipos) haya. Esta
es la solución más común, muchos atributos distintos, relaciones con los subtipos, etc.
c) Crear tantas relaciones como subtipos haya, insertando en ellos los atributos del padre.
En todos los casos hay que crear las aserciones y los disparadores adecuados para cumplir
las restricciones que vienen implícitas en la jerarquía.
16 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
17 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
En este tipo de relaciones que agrupan 3 o más entidades, se seguirán las siguientes pautas:
Cada entidad se convierte en una tabla siendo la clave primaria el identificador de la misma.
La relación también se convierte en una tabla y tendrá como campos los atributos de la
relación si los tuviera y los campos clave de las entidades.
La clave primaria de la tabla de la relación será la concatenación de las claves aportadas por
las entidades con participación N.
Ejemplos:
RELACIÓN N:N:N Un paciente puede recibir varios diagnósticos. Un médico puede realizar
varios diagnóstico. Los diagnósticos son una descripción general de una enfermedad por lo
que varios pacientes pueden ser diagnosticados de “dermatitis”.
18 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Relación 1:N:N Un perro solo pertenece a un cliente. El cliente puede tener 1 o varios perros.
Relación 1:1:N “Un jugador entrena con un único entrenador siempre en la misma pista. El
entrenador puede entrenar en varias pistas. El entrenador puede entrenar a varios jugadores.”
ENTRENADORES (#e)
JUGADORES (#j)
PISTAS(#p)
ENTRENA(#j, #e, #p)
PK: #j
FK: #e ENTRENADORES,
#j JUGADORES,
#p PISTAS
Como solo JUGADOR tiene una participación n, la clave primaria de ENTRENA sería la clave de jugador.
Si quisiéramos llevar un histórico de entrenamientos con día y hora, estos datos se colgarían de la
relación entrena quedando ENTRENA de la siguiente forma:
19 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
En este caso, no podemos elegir como clave primaria solo el código del jugador pues se nos
va a repetir tantas veces entrenamientos realice:
ENTRENA
#j #e #p Dia hora
Tendríamos que añadir al código del
100 10 1 1/10/2023 10:00 jugador, el día del entrenamiento. Incluso,
101 20 2 1/10/2023 10:00
si un jugador puede entrenar a dos horas
100 10 1 2/10/2023 20:00
distintas, la hora.
100 10 1 3/10/2023 20:20
TRIBUNAL (id_tribunal)
ESTUDIANTE(id_estudiante)
PROYECTO (id_proyecto)
EXAMINA(id_estudiante, id_proyecto, id_tribunal)
PK: id_estudiante ó id_proyecto ó id_tribunal (UNA)
FK: id_estudiante ESTUDIANTES
FK: id_proyecto PROYECTOS
Fk: id_tribunal TRIBUNALES
4. NORMALIZACIÓN
Se analizarán las tablas, comprobando los requisitos de cada forma normal. Cuando estos no se
cumplan, habrá que realizar las transformaciones necesarias para la tabla adopte dicha forma
normal. Estas transformaciones suelen consistir en fragmentar tablas complejasen tablas más
simples con un número de atributos mínimo que defina la entidad y establecer relaciones entre
ellas a través de las claves.
Existen 6 formas normales. Se dice que “una tabla está en una forma normal, cuando satisface
las restricciones impuestas por dicha forma normal”.
PRODUCTOS
Cod Nombre Precio Desc Especialidad
100 Fideo Cabellín 50.34 “………” Mantenimiento
200 Tallarín huevo 60.30 “………” Seguridad
600 Macarrón n3 45.00 “………” Seguridad
300 Punto de Lluvia 67.90 “………” Vigilancia
400 Macarrón n4 45.00 “………” Seguridad
500 Fideo n4 40.30 “………” vigilancia
(CódigoProducto,CódigoProveedor) FechaCompra
Cod_material Descripción
39 Tornillo
67 Arandela
461 Broca
Tabla 2 (R2): Incluir la clave primaria de la tabla e incluir una fila por cada valor del
atributo multievaluado. La clave primaria de esta nueva tabla sería la conjunta de su
tabla original más el campo multievaluado.
Cod_material Medidas
39 5,6
39 7
39 23
67 4
67 8
67 56
23 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Tabla 1 (R1): la parte de la clave que tiene depencias y los atributos que determina:
DNI Nombre_empleado
Una tabla que no tiene atributos secundarios se encuentra en Tercera Forma Normal, y una tabla
que contenga un solo atributo secundario también.
24 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Formar otra proyección que contendrá el atributo del cual dependían los otros campos
(que será clave principal) y los campos que dependían de él
Num_Fact Total_factura Fecha Cod_Cli
5. Recomendaciones de Diseño
5.1.¿Entidad o Atributo?
Dependerá de si el objeto que se nombra, tiene características o no. Del número, etc. De la
semántica del enunciado en sí. Vamos a ver con un ejemplo, cómo cambiaría el modelo E/R
dependiendo de cómo nos pidan almacenar el teléfono.
25 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Queremos almacenar el empleado con el DNI, nombre completo y todos los teléfonos que
tenga:
Podemos considerar el mismo esquema
pero marcamos el atributo teléfonos como
MULTIVALOR aunque como ya hemos visto
entre las características del modelo Relacional
Normalizado, NO PODEMOS TENER EN UNA
TABLA ATRIBUTOS DE ESTE TIPO y tendremos
que solucionarlo.
Queremos almacenar el empleado con el DNI, nombre completo y todos los teléfonos que
tenga y las horas en las que podemos llamarle a lo largo del día en cada uno de los teléfonos
a parte de la compañía telefónica de cada línea.
5.2.¿Relación o Entidad?
Queremos tener información de las sucursales que prestan dinero a los clientes.
26 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Teniendo en cuenta que un cliente le puede prestar dinero diferentes sucursales y sabiendo
que al ser N:N la relación presta_a y que daría lugar a una tabla por lo tanto y se repetirían las
claves… podemos solucionarlo añadiendo la fecha a la relación y la cantidad para que sea
distinto:
SUCURSALES(id, dirección)
Pk: id
CLIENTES(Dni, Nombre)
Pk: Dni
PRESTA_A(id, Dni, Num_Pres, Cantidad)
Pk:(id, Dni, Num_Pres)
Fk: id SUCURSALES
Fk: dni CLIENTES
El problema que tiene este tipo de relaciones son los errores derivados de la actualización.
Ejemplo.- Imaginemos que Pablo Lopez y Germán Sánchez son titulares del mismo préstamo;
en la tabla de PRESTA_A tendremos:
SUCURSALES PRESTA_A
Id direccion Dni Id NumPrestamo Cantidad
1 C/SAN FRANCISCO 111111B 1 1000 2345000
2 AVDA. JUAN CARLOS I 222222C 1 1000 2345000
CLIENTES
Dni Nombre
Si tenemos que actualizar el importe y solo lo
1111111B PABLO LOPEZ
actualizamos para uno de los clientes, ya
2222222C GERMÁN habría una incoherencia.
SÁNCHEZ
SUCURSALES(id, dirección)
Pk: id
CLIENTES(Dni, Nombre)
Pk: Dni
PRESTAMOS(Num_Pres, Cantidad, id_sucursal)
Pk: Num_Pres
Fk: id_sucursal SUCURSALES
TIENEN(Dni, Num_prestamo)
Pk: dni, Num_prestamo
FK: dni CLIENTES
Num_Prestamo PRESTAMOS
27 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
SUCURSALES PRESTAMOS
Id direccion NumPrestamo Cantidad IdSucursal
1 C/SAN FRANCISCO
1000 2345000 1
2 AVDA. JUAN CARLOS I
1001 4000 2
En este caso, solo
CLIENTES TIENEN tendríamos que
Dni Nombre Dni NumPrestamo actualizar la cantidad de
1111111B PABLO LOPEZ 111111B 1000 la tabla PRESTAMOS.
2222222C GERMÁN 222222C 1000
SÁNCHEZ
3333333D LOLA FDEZ. 333333C 1001
28 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Pasamos al Relacional:
Imaginemos que nos piden mostrar un listado de empleados y los trabajos que desempeñan en las diferentes
sucursales. El Nombre SUCURSALES
listado debe mostrar el NombreCompleto del empleado, el Nombre de la sucursal y el puesto.
SELECT EMPLEADOS.NombreCompleto,
SUCURSALES.Nombre,
TRABAJOS.puesto
FROM EMPLEADOS JOIN TRABAJA ON EMPLEADOS.dni=TRABAJA.dni
JOIN SUCURSALES ON TRABAJA.Nombre=SUCURSALES.Nombre
JOIN TIENE ON TIENE.Nombre=SUCURSALES.Nombre
JOIN TRABAJOS ON TRABAJOS.#t=TIENE.#t;
SELECT EMPLEADOS.NombreCompleto,
SUCURSALES.Nombre,
TRABAJOS.puesto
FROM EMPLEADOS JOIN REALIZA ON EMPLEADOS.dni=REALIZA.dni
JOIN SUCURSALES ON REALIZA.Nombre=SUCURSALES.Nombre
JOIN TRABAJOS ON TRABAJOS.#t=REALIZA.#t;
29 | 30
Diseño de bases de datos relacionales. DAMEL
Diseño LÓGICO 2023-24
Si aparecen atributos fecha en una relación del diagrama Entidad-Relación, es posible que
tengas que añadir dicho atributo a la clave principal para contemplar el hecho que un suceso se
puede repetir a lo largo del tiempo. Pasamos al Relacional:
Ejemplo:
SOCIOS(cod_s)
FK: cod_s
LIBROS(cod_l)
FK: cod_l
PRESTAN(cod_s, cod_l, F_inicio, F_fin)
PK: cod_s, cod_l
FK: cod_s SOCIOS
cod_l LIBROS
Si elegimos la Primary Key por defecto, combinación de Primary Key de ambas entidades,
vemos que no se podría llevar un histórico de las veces que un mismo socio ha prestado el mismo
libro. Habría entonces que incorporar la fecha de inicio, por ejemplo a la PK.
En general, para saber si una clave está bien elegida, podemos plantearnos la siguiente
pregunta:
Para una clave determinada, ¿Cuántas filas obtengo en la tabla? La respuesta siempre
debe ser UNA.
En el ejemplo anterior, la Primary Key definitiva debería ser (cod_s, cod_l, F_inicio)
30 | 30