Está en la página 1de 11

M O D E L O A - D N I : 2 0 0 8 9 510 E 1

AC T I V I DA D E VA L UA B L E 2
1ER TRIMESTRE
- BASE DE DATOS -
1º DAW
C a r l e s Tu r C a r d o n a

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv



M O D E L O A - D N I : 2 0 0 8 9 510 E 2

Índice (pulsar en los números para ir a la página deseada)


Ejercicio 1: Modelado lógico-relacional ..........................................................3

1.1 - Creación de las primeras tablas a partir de las relaciones ....................................3


1.2 - Transformación a 3FN .......................................................................................4
Ejercicio 2: Modelado físico DDL (creación de metadatos) ..............................7

Ejercicio 3: Modelado físico DDL (modi cación de metadatos) .......................9

Ejercicio 4: Modelado físico DDL (manipulación de datos) ............................10

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv



fi
M O D E L O A - D N I : 2 0 0 8 9 510 E 3

Ejercicio 1: Modelado lógico-relacional


1.1 - Creación de las primeras tablas a partir de las
relaciones

coche_o cial (matricula, modelo, marca)


CP: matricula

politico (dni, nom_comp {nombre, apellidos}, {telefono}n, correo_elec, sueldo, dir_comp {dir_postal, cod_postal, localidad, provincia} , matricula)
CP: dni
CAj: matricula → coche_o cial (matricula)
VNN: matricula
VNN: sueldo

cargo (dni, nombre, complemento, comision)


CP: dni
CAj: dni → politico (dni)

concejal (dni, oposicion_sn, comp_sillon)


CP: dni
CAj: dni → politico (dni)

asesor (dni, telefono, nombre, estudios, dni_politico, supervisado_por_asesor)


CP: dni
CAj: dni_politico → politico (dni)
CAj: supervisado_por_asesor → asesor (dni)
VNN: dni_politico
VNN: supervisado_por_asesor

reunion (codigo, descripcion, f_celebracion)


CP: codigo
VNN: f_celebracion

dieta (concepto, descripcion)


CP: concepto

desglose (linea, concepto, cantidad, importe, dni)


CP: (linea, concepto, dni)
CAj: concepto → dieta (concepto) B:C
CAj: dni → politico (dni)

cobrar (concepto, codigo, dni)


CP: (dni, codigo, concepto)
CAj: dni → politico (dni)
CAj: codigo → reunion (codigo)
CAj: concepto → dieta (concepto)

Restricciones:

(1) Pérdida semántica → Cada coche tendrá, al menos, 1 político asociado.


(2) Pérdida semántica → Cada político tendrá, al menos, un asesor asignado.
(3) Restricción de identidad → Todo politico es un cargo o un concejal al menos, pero puede ser las dos cosas al mismo tiempo (T+S).
(4) ATT derivado → asistentes = politicos_totales – politicos_no.presentes (a pesar de no tener ninguno de estos valores para recuperar el valor de
asistentes lo eliminamos de la tabla ya que si necesitamos saber el número de asistentes totales lo podemos sacar también con una consulta, como
por ejemplo: SELECT COUNT(codigo) FROM cobrar WHERE codigo = ‘COM001'; ).
(5) Restricción metadatos → la Caj de desglose (concepto) tendrá un comportamiento borrado en cascada ya que esta dentro de una relación
binaria débil.

Observaciones:

En las observaciones del ejercicio se nos indica lo descrito en las siguientes imágenes, por ende entendemos que se necesita re ejar en desglose
qué politico esta cobrando esa dieta, ya que sino hay un problema a la hora de introducir los datos que nos piden (las lineas de cada politico
empiezan por 1, luego 2… etc. Por ello al ser una clave principal la clave ‘linea’, no deja repetir los datos en ella y no podemos introducir los datos
en la tabla, además que se pierde la información de qué politico cobra qué dieta. Por todo esto justi camos la introducción de la clave principal ‘dni’
dentro de la tabla desglose además de ser parte de la clave principal compuesta (linea, concepto, dni).

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
fi
fi
fl
M O D E L O A - D N I : 2 0 0 8 9 510 E 4

1 . 2 - Tr a n s f o r m a c i ó n a 3 F N

1.2.1.- Paso a 1FN:

coche_o cial (matricula, modelo, marca)


CP: matricula

politico (dni, nombre, apellidos, correo_elec, sueldo, dir_postal, cod_postal, localidad, provincia, matricula)
CP: dni
CAj: matricula → coche_o cial (matricula)
VNN: matricula
VNN: sueldo

telefono_pol (telefono, dni)


CP: (telefono, dni)
CAj: dni → politico (dni)

cargo (dni, nombre, complemento, comision)


CP: dni
CAj: dni → politico (dni)

concejal (dni, oposicion_sn, comp_sillon)


CP: dni
CAj: dni → politico (dni)

asesor (dni, telefono, nombre, estudios, dni_politico, supervisado_por_asesor)


CP: dni
CAj: dni_politico → politico (dni)
CAj: supervisado_por_asesor → asesor (dni)
VNN: dni_politico
VNN: supervisado_por_asesor

reunion (codigo, descripcion, f_celebracion)


CP: codigo
VNN: f_celebracion

dieta (concepto, descripcion)


CP: concepto

desglose (linea, concepto, cantidad, importe, dni)


CP: (linea, concepto, dni)
CAj: concepto → dieta (concepto) B:C
CAj: dni → politico (dni)

cobrar (concepto, codigo, dni)


CP: (dni, codigo, concepto)
CAj: dni → politico (dni)
CAj: codigo → reunion (codigo)
CAj: concepto → dieta (concepto)

Ahora ya esta todo dejado en 1FN al no haber ningún atributo compuesto, multievaluado ni derivado dentro de ninguna tabla.

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
fi
M O D E L O A - D N I : 2 0 0 8 9 510 E 5

1.2.2.- Paso a 2FN:

coche_o cial (matricula, modelo, marca)


CP: matricula

politico (dni, nombre, apellidos, correo_elec, sueldo, dir_postal, cod_postal, localidad, provincia, matricula)
CP: dni
CAj: matricula → coche_o cial (matricula)
VNN: matricula
VNN: sueldo

telefono_pol (telefono, dni)


CP: (telefono, dni)
CAj: dni → politico (dni)

cargo (dni, nombre, complemento, comision)


CP: dni
CAj: dni → politico (dni)

concejal (dni, oposicion_sn, comp_sillon)


CP: dni
CAj: dni → politico (dni)

asesor (dni, telefono, nombre, estudios, dni_politico, supervisado_por_asesor)


CP: dni
CAj: dni_politico → politico (dni)
CAj: supervisado_por_asesor → asesor (dni)
VNN: dni_politico
VNN: supervisado_por_asesor

reunion (codigo, descripcion, f_celebracion)


CP: codigo
VNN: f_celebracion

dieta (concepto, descripcion)


CP: concepto

desglose (linea, concepto, cantidad, importe, dni)


CP: (linea, concepto, dni)
CAj: concepto → dieta (concepto) B:C
CAj: dni → politico (dni)

cobrar (concepto, codigo, dni)


CP: (dni, codigo, concepto)
CAj: dni → politico (dni)
CAj: codigo → reunion (codigo)
CAj: concepto → dieta (concepto)

La única tabla que tiene atributos principales compuestos y al mismo tiempo otros atributos es desglose:

linea
cantidad

concepto
importe

dni

Se puede observar que los atributos que no son clave principal dependen del conjunto entero, así que podemos a rmar que ya esta en 2FN y no
hace falta hacer más cambios.

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
fi
fi
M O D E L O A - D N I : 2 0 0 8 9 510 E 6

1.2.3- Paso a 3FN:

Para realizar la transformación a 3FN eliminamos la única relación transitiva que existe dentro de la tabla político:

coche_o cial (matricula, modelo, marca)


CP: matricula

politico (dni, nombre, apellidos, correo_elec, sueldo, matricula)


CP: dni
CAj: matricula → coche_o cial (matricula)
VNN: matricula
VNN: sueldo

direccion_pol (dni, dir_postal, cod_postal, localidad, provincia)


CP: dni
CAj: dni → politico (dni)

telefono_pol (telefono, dni)


CP: (telefono, dni)
CAj: dni → politico (dni)

cargo (dni, nombre, complemento, comision)


CP: dni
CAj: dni → politico (dni)

concejal (dni, oposicion_sn, comp_sillon)


CP: dni
CAj: dni → politico (dni)

asesor (dni, telefono, nombre, estudios, dni_politico, supervisado_por_asesor)


CP: dni
CAj: dni_politico → politico (dni)
CAj: supervisado_por_asesor → asesor (dni)
VNN: dni_politico
VNN: supervisado_por_asesor

reunion (codigo, descripcion, f_celebracion)


CP: codigo
VNN: f_celebracion

dieta (concepto, descripcion)


CP: concepto

desglose (linea, concepto, cantidad, importe, dni)


CP: (linea, concepto, dni)
CAj: concepto → dieta (concepto) B:C
CAj: dni → politico (dni)

cobrar (concepto, codigo, dni)


CP: (dni, codigo, concepto)
CAj: dni → politico (dni)
CAj: codigo → reunion (codigo)
CAj: concepto → dieta (concepto)

Ahora ya tendríamos todas las tablas en 3FN.

Restricciones:

(1) Pérdida semántica → Cada coche tendrá, al menos, 1 político asociado.


(2) Pérdida semántica → Cada político tendrá, al menos, un asesor asignado.
(3) Restricción de identidad → Todo politico es un cargo o un concejal al menos, pero puede ser las dos cosas al mismo tiempo (T+S).
(4) ATT derivado → asistentes = politicos_totales – politicos_no.presentes (a pesar de no tener ninguno de estos valores para recuperar el valor de
asistentes lo eliminamos de la tabla ya que si necesitamos saber el número de asistentes totales lo podemos sacar también con una consulta, como
por ejemplo: SELECT COUNT(codigo) FROM cobrar WHERE codigo = ‘COM001'; ).
(5) Restricción metadatos → la Caj de desglose (concepto) tendrá un comportamiento borrado en cascada ya que esta dentro de una relación
binaria débil.

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
fi
M O D E L O A - D N I : 2 0 0 8 9 510 E 7

Ejercicio 2: Modelado físico DDL


(creación de metadatos)
Indica las sentencias necesarias para incorporar las tablas del ejercicio anterior en MySQL. Recuerda tener cuidado con el
orden de las instrucciones.

CREATE DATABASE Ayuntamiento CHARACTER SET utf8 COLLATE utf8_general_ci;


USE Ayuntamiento;

CREATE TABLE coche_o cial (


matricula VARCHAR(7) PRIMARY KEY,
modelo VARCHAR(30),
marca VARCHAR(20)
);

CREATE TABLE politico (


dni VARCHAR(9) PRIMARY KEY,
nombre VARCHAR(30),
apellidos VARCHAR(60),
correo_elec VARCHAR(60),
sueldo FLOAT NOT NULL,
matricula VARCHAR(7) NOT NULL,
CONSTRAINT pol_mat_fk FOREIGN KEY (matricula) REFERENCES coche_o cial (matricula)
);

CREATE TABLE direccion_pol (


dni VARCHAR(9) PRIMARY KEY,
dir_postal VARCHAR(60),
cod_postal INT,
localidad VARCHAR(40),
provincia VARCHAR(60),
CONSTRAINT dir_dni_fk FOREIGN KEY (dni) REFERENCES politico (dni)
);

CREATE TABLE telefono_pol (


dni VARCHAR(9),
telefono INT,
CONSTRAINT tel_pk PRIMARY KEY (dni, telefono),
CONSTRAINT tel_dni_fk FOREIGN KEY (dni)
);

CREATE TABLE cargo (


dni VARCHAR(9) PRIMARY KEY,
nombre VARCHAR(90),
complemento VARCHAR(40),
comision INT,
CONSTRAINT car_dni_fk FOREIGN KEY (dni) REFERENCES politico (dni)
);

CREATE TABLE concejal (


dni VARCHAR(9) PRIMARY KEY,

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
fi
M O D E L O A - D N I : 2 0 0 8 9 510 E 8

oposicion_sn VARCHAR(40),
comp_sillon INT,
CONSTRAINT con_dni_fk FOREIGN KEY (dni) REFERENCES politico (dni)
);

CREATE TABLE asesor (


dni VARCHAR(9) PRIMARY KEY,
telefono INT,
estudios VARCHAR(11),
dni_politico VARCHAR(9) NOT NULL,
supervisado_por_asesor VARCHAR(60) NOT NULL,
CONSTRAINT ase_dni_fk FOREIGN KEY (dni) REFERENCES politico (dni),
CONSTRAINT ase_sup_fk FOREIGN KEY (supervisado_por_asesor) REFERENCES asesor (dni),
CONSTRAINT ase_est_chk CHECK (estudios IN ('ninguno', 'básico', 'falsi cado'))
);

CREATE TABLE reunion (


codigo VARCHAR(6) PRIMARY KEY,
descripcion VARCHAR(60),
f_celebracion DATE NOT NULL
);

CREATE TABLE dieta (


concepto VARCHAR(15) PRIMARY KEY,
descripcion VARCHAR(60)
);

CREATE TABLE cobrar (


concepto VARCHAR(15),
codigo VARCHAR(6),
dni VARCHAR(9),
CONSTRAINT cob_pk PRIMARY KEY (concepto, codigo, dni),
CONSTRAINT cob_con_fk FOREIGN KEY (concepto) REFERENCES dieta (concepto),
CONSTRAINT cob_cod_fk FOREIGN KEY (codigo) REFERENCES reunion (codigo),
CONSTRAINT dni_cod_fk FOREIGN KEY (dni) REFERENCES politico (dni)
);

CREATE TABLE desglose (


linea INT,
concepto VARCHAR(15),
dni VARCHAR(9),
cantidad INT,
importe INT,
CONSTRAINT des_pk PRIMARY KEY (linea, concepto, dni),
CONSTRAINT des_con_fk FOREIGN KEY (concepto) REFERENCES dieta (concepto) ON DELETE CASCADE,
CONSTRAINT des_dni_fk FOREIGN KEY (dni) REFERENCES politico (dni)
);

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
M O D E L O A - D N I : 2 0 0 8 9 510 E 9

Ejercicio 3: Modelado físico DDL


(modificación de metadatos)
· Operación 1.- Modi car la tabla POLÍTICO para que los campos “nombre” y “apellidos” sean únicos (en conjunto),
es decir, que se pueda repetir el nombre y los apellidos por separado pero no puedan insertarse dos las con los dos
datos idénticos:
// Para realizar esta operación simplemente añadimos una restricción a la tabla politico para que los valores nombre y
apellido en conjunto se consideren únicos:

ALTER TABLE politico ADD CONSTRAINT pol_uk UNIQUE (nombre, apellidos);

· Operación 2.- Cambiar la participación de la entidad POLÍTICO en la relación DISPONER de (1,1) a (0,1):
// Para realizar esta operación modi camos la columna matrícula dentro de la tabla politico ya que antes al ser una relación
(1,1) indicaba que siempre tenia un coche asociado como mínimo, esto se re ejaba como una restricción de integridad
indicando que el valor matricula (ya que es la clave ajena en politico que se relaciona con la tabla coche_o cial) no podía
ser nulo. Ahora al cambiar la relación a (0,1) esta restricción no existe por lo que hay que eliminarla de esa columna. Para
ello modi camos la columna matricula porque según hemos formulado el codigo anteriormente no es una CONSTRAINT
externa, sino que la restricción forma parte directamente de la columna. Al modi carla la dejamos igual pero sin añadir el
valor NOT NULL, quitándole así esta restricción:

ALTER TABLE politico MODIFY matricula VARCHAR(7);

· Operación 3.- Permitir que se pueda modi car el concepto de la tabla DIETA, propagando este cambio

a las tablas dependientes de este dato:


// Para realizar esta operación debemos añadir una restricción en las tablas cobrar y desglose para que se puedan modi car.
Para ello primero tenemos que eliminar las restricciones actuales para luego volver a añadirlas corregidas porque no se
pueden modi car como tal:

Tabla cobrar:
ALTER TABLE cobrar DROP FOREIGN KEY cob_con_fk;
ALTER TABLE cobrar ADD CONSTRAINT cob_con_fk FOREIGN KEY (concepto) REFERENCES dieta (concepto) ON
UPDATE CASCADE;

Tabla desglose:

ALTER TABLE desglose DROP FOREIGN KEY des_con_fk;


ALTER TABLE desglose ADD CONSTRAINT des_con_fk FOREIGN KEY (concepto) REFERENCES dieta (concepto) ON
UPDATE CASCADE ON DELETE CASCADE;

Al no indicarse nada de lo contrario se mantiene la restricción de ON DELETE CASCADE de la propia tabla, sólo añadimos
la restricción de UPDATE.

· Operación 4.- Modi car la tabla REUNIÓN para que por defecto la fecha de celebración sea la fecha del sistema:

// Para realizar esta operación modi camos la columna f_celebracion dentro de la tabla reunion:

ALTER TABLE reunion MODIFY COLUMN f_celebracion TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
fi
fi
fi
fi
fi
fi
fl
fi
fi
fi
fi
M O D E L O A - D N I : 2 0 0 8 9 510 E 10

Ejercicio 4: Modelado físico DDL


(manipulación de datos)
· Operación 1.- Rellenar las tablas con los valores indicados, inventando los que no se re ejen:

// Para llenar las tablas con los datos pedidos usamos el siguiente código:

INSERT INTO coche_o cial (matricula, modelo, marca) VALUES


('1111AAA', '300 SLR Uhlenhaut', 'Mercedes'),
('2222AAB', 'XM Label Red', 'BMW'),
('3333AAC', 'LFA', 'Lexus');

INSERT INTO politico (dni, nombre, apellidos, correo_elec, sueldo, matricula) VALUES
('11111111A', 'Paco', 'Butxaca', 'pacobutxaca@corrupto.com', 8000, '1111AAA'),
('22222222B', 'Pepe', 'Meloquedo', 'pepemeloquedo@corrupto.com', 6000, '2222AAB'),
('33333333C', 'Armando', 'Nopuedo', 'armandonopuedo@corrupto.com', 3000, '3333AAC');

INSERT INTO cargo (dni, nombre, complemento, comision) VALUES


('11111111A', 'alcalde', 'presidencia', 1000),
('22222222B', 'teniente alcalde', 'adjunto', 500);

INSERT INTO concejal (dni, oposicion_sn, comp_sillon) VALUES


('33333333C', 'si', 500);

INSERT INTO asesor (dni, telefono, nombre, estudios, dni_politico) VALUES


('44444444D', 666777888, 'Eustaquio', 'ninguno', '11111111A'),
('55555555E', 667778889, 'Saruman', 'falsi cado', '22222222B');

INSERT INTO reunion (codigo, descripcion) VALUES


('COM001', 'Comisión para subir impuestos'),
('COM002', 'Comisión para asesorar a los asesores'),
('PLE001', 'Pleno del Ayuntamiento');

INSERT INTO dieta (concepto, descripcion) VALUES


('Desplazamiento', 'Desplazamiento de la planta baja a la primera planta'),
('Productividad', 'Productividad por creación de problemas y burocracia'),
('Plus', 'Plus por cargo adicional'),
('Silla', 'Calentamiento de la silla');

· Operación 2.- El asesor Eustaquio es supervisado por Saruman:

// Para re ejar esto debemos usar el siguiente código dentro de la tabla asesor modi cando el parámetro
‘supervisado_por_asesor’:

UPDATE asesor SET supervisado_por_asesor = 'Saruman' WHERE dni = '44444444D';

· Operación 3.- El Ayuntamiento celebra una REUNIÓN (pleno) con fecha 1/12/2023:

// Para re ejar la reunion debemos modi car la fecha que se va a dar de alta como la fecha del sistema, ademas de
introducir los valores que se nos indican:

UPDATE reunion SET f_celebracion = STR_TO_DATE('2023-12-01 09:30:00', '%Y-%m-%d %H:%i:%s') WHERE codigo =
'PLE001';

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fl
fl
fi
fi
fi
fi
fl
M O D E L O A - D N I : 2 0 0 8 9 510 E 11

INSERT INTO cobrar (dni, concepto, codigo) VALUES


('11111111A', 'Desplazamiento', 'PLE001'),
('22222222B', 'Desplazamiento', 'PLE001'),
('33333333C', 'Desplazamiento', 'PLE001');

INSERT INTO desglose (dni, concepto, linea, cantidad, importe) VALUES


('11111111A', 'Desplazamiento', 1, 1, 100),
('11111111A', 'Desplazamiento', 2, 2, 75),
('22222222B', 'Desplazamiento', 1, 5, 50),
('33333333C', 'Desplazamiento', 1, 2, 30),
('33333333C', 'Desplazamiento', 2, 10, 5);

· Operación 4.- El Ayuntamiento celebra una REUNIÓN (comisión para subir impuestos) con fecha 2/12/2023:

// De nuevo debemos modi car la fecha de la reunión en concreto y llenar las tablas correspondientes con los datos que
nos proporcionan, el codigo sería el siguiente:

UPDATE reunion SET f_celebracion = STR_TO_DATE('2023-12-02 10:15:00', '%Y-%m-%d %H:%i:%s') WHERE codigo =
'COM001';

INSERT INTO cobrar (dni, concepto, codigo) VALUES


('11111111A', 'Plus', 'COM001'),
('22222222B', 'Plus', 'COM001');

INSERT INTO desglose (dni, concepto, linea, cantidad, importe) VALUES


('11111111A', 'Plus', 1, 1, 500),
('22222222B', 'Plus', 1, 1, 300);

· Operación 5.- Actualiza la fecha de celebración de la reunión del pleno a 5/12/2023:

// De nuevo debemos modi car la fecha de la reunión en concreto según el siguiente código:

UPDATE reunion SET f_celebracion = STR_TO_DATE('2023-12-05 10:30:00', '%Y-%m-%d %H:%i:%s') WHERE codigo =
'PLE001';

· Operación 6.- Borra el político Armando:

// Para eliminar al político Armando debemos usar el codigo DELETE FROM de la siguiente manera en todas tablas donde
aparece Armando usando el dni com identi cador:

DELETE FROM concejal WHERE dni = '33333333C';

DELETE FROM cobrar WHERE dni = '33333333C';

DELETE FROM desglose WHERE dni = '33333333C';

DELETE FROM politico WHERE dni = '33333333C';

C/ Casa de la Misericordia, 34 - 46014 Valencia // Tel. 961206990 // portal.edu.gva.es/ceedcv Índice



fi
fi
fi

También podría gustarte