Bases De Datos Relacionales, MYSQL. Diseño Físico, Triggers, Insertado De Datos, Consultas, Procedures y Funciones.

Hola buenas hoy os traigo un pequeño ejercicio de bases de datos relacionales, el cual os voy a enseñar el resultado del código programado.

mysql-logo-1329320869

Comenzamos con el código, la primera parte que mostrare será el diseño físico de la base de datos:

/**********************************************************************************************************************************************************************/

/***********************************************                                         FÍSICO                                        *********************************************************************/
DROP TABLE IF EXISTS DDM_TUTORES;
CREATE TABLE IF NOT EXISTS DDM_TUTORES(
id INT PRIMARY KEY,
NombreResponsable VARCHAR(255) NOT NULL,
Parentesco VARCHAR(50) NOT NULL,
TelefonoResponsable CHAR(9) NOT NULL
)ENGINE=INNODB CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

DESCRIBE DDM_TUTORES;

Screenshot_1

DROP TABLE IF EXISTS DDM_ALUMNOS;
CREATE TABLE IF NOT EXISTS DDM_ALUMNOS(
id INT PRIMARY KEY,
NombreAlumno VARCHAR(250) NOT NULL,
FechaNacimiento DATE NOT NULL,
tutor INT NOT NULL,
numexpedientes INT NOT NULL DEFAULT 0,
CONSTRAINT FK1ALUMNOSTUTORES FOREIGN KEY(tutor) REFERENCES DDM_TUTORES(id) ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

DESCRIBE DDM_ALUMNOS;

Screenshot_2

DROP TABLE IF EXISTS DDM_EXPEDIENTES;
CREATE TABLE IF NOT EXISTS DDM_EXPEDIENTES(
id INT PRIMARY KEY,
alumno INT NOT NULL,
FechaExpediente DATE NOT NULL,
MotivoExpediente VARCHAR(250) NOT NULL,
CONSTRAINT FK2EXPEDIENTES FOREIGN KEY(alumno) REFERENCES DDM_ALUMNOS(id) ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

DESCRIBE DDM_EXPEDIENTES;

Screenshot_3

DROP TABLE IF EXISTS DDM_TOTALES;
CREATE TABLE IF NOT EXISTS DDM_TOTALES(
id INT PRIMARY KEY,
totalumnos INT NOT NULL DEFAULT 0,
totexpedientes INT NOT NULL DEFAULT 0,
tottutores INT NOT NULL DEFAULT 0
)ENGINE=INNODB CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

DESCRIBE DDM_TOTALES;

INSERT INTO DDM_TOTALES(id) VALUES
(1);

Screenshot_4

/**********************************************************************************************************************************************************************/

/***********************************************                                         TRIGGERS                                          ****************************************************************/

DROP TRIGGER IF EXISTS CUENTAEXPEDIENTES;

DELIMITER //

CREATE TRIGGER CUENTAEXPEDIENTES AFTER INSERT ON DDM_EXPEDIENTES
FOR EACH ROW
BEGIN
UPDATE DDM_ALUMNOS
SET numexpedientes = numexpedientes + 1
WHERE DDM_ALUMNOS.id = NEW.alumno;

UPDATE DDM_TOTALES
SET totexpedientes = totexpedientes + 1
WHERE DDM_TOTALES.id = 1;

END //

DELIMITER ;

/* ***********************************************************************************************/
DROP TRIGGER IF EXISTS CUENTATUTORES;

DELIMITER //

CREATE TRIGGER CUENTATUTORES AFTER INSERT ON DDM_TUTORES
FOR EACH ROW
BEGIN
UPDATE DDM_TOTALES
SET tottutores = tottutores + 1
WHERE DDM_TOTALES.id = 1;

END //

DELIMITER ;
/* ***********************************************************************************************/
DROP TRIGGER IF EXISTS CUENTAALUMNOS;

DELIMITER //

CREATE TRIGGER CUENTAALUMNOS AFTER INSERT ON DDM_ALUMNOS
FOR EACH ROW
BEGIN
UPDATE DDM_TOTALES
SET totalumnos = totalumnos + 1
WHERE DDM_TOTALES.id = 1;

END //

DELIMITER ;

Screenshot_5

 

 

/**********************************************************************************************************************************************************************/

/***********************************************                                         INSERTS                                          ****************************************************************/
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(1,’Alberto Grau López’,’Padre’,’600600600′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(2,’Ana Méndez Sanz’,’Madre’,’612612612′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(3,’Lucía Álvarez Rilo’,’Madre’,’699699699′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(4,’Antonio Abad Pérez’,’Padre’,’634634634′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(5,’Elena Pérez Pérez’,’Madre’,’600700800′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(6,’Alicia Vázquez Egea’,’Madre’,’654654654′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(7,’Alberto López Gala’,’Tutor Legal’,’678678678′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(8,’José Mateo Soto’,’Padre’,’677677677′);
INSERT INTO DDM_TUTORES(id, NombreResponsable, Parentesco, TelefonoResponsable) VALUES
(9,’Rosa Aledo Muñoz’,’Madre’,’611611611′);
SELECT * FROM DDM_TUTORES;

Screenshot_6
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(1,’Alba Grau Pérez’,’1998-02-05′,’1′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(2,’Pablo Gea Sanz’,’1997-03-19′,’2′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(3,’Rafael Gil Rilo’,’1997-04-01′,’3′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(4,’Ana Abad Lara’,’1998-01-03′,’4′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(5,’Eva Abad Lara’,’1999-07-20′,’4′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(6,’Carla Rojo Sala’,’2000-05-05′,’5′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(7,’José Pardo Olmo’,’2000-10-19′,’6′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(8,’Beatriz Vera Cobos’,’1999-12-12′,’7′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(9,’Pablo Mateo Lara’,’2000-08-14′,’8′);
INSERT INTO DDM_ALUMNOS(id, NombreAlumno, FechaNacimiento, tutor) VALUES
(10,’Carlos Pino Sabina’,’1999-06-06′,’9′);

SELECT * FROM DDM_ALUMNOS;

Screenshot_7
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(1,’1′,’2013-10-14′,’Agresión verbal a un compañero’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(2,’2′,’2014-01-27′,’Agresión física a un compañero’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(3,’3′,’2014-02-20′,’Hurto de material del centro’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(4,’4′,’2014-02-26′,’agresión verbal a un compañero’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(5,’5′,’2014-03-02′,’Rotura del mobiliario de clase’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(6,’6′,’2014-05-03′,’Agresión verbal a un compañero’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(7,’1′,’2015-01-23′,’Agresión verbal a un compañero’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(8,’7′,’2015-02-03′,’Rotura del mobiliario de clase’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(9,’8′,’2015-02-17′,’Agresión física a un compañero’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(10,’9′,’2015-03-07′,’Hurto de material del centro’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(11,’10’,’2015-04-15′,’Agresión verbal a un compañero’);
INSERT INTO DDM_EXPEDIENTES(id, alumno, FechaExpediente, MotivoExpediente) VALUES
(12,’1′,’2015-05-23′,’Hurto de material del centro’);

SELECT * FROM DDM_EXPEDIENTES;

SELECT * FROM DDM_ALUMNOS;

SELECT * FROM DDM_TOTALES;

Screenshot_8

 

TABLA DDM_ALUMNOS CON EL FUNCIONAMIENTO DE LOS TRIGGER:

Screenshot_9

TABLA DDM_TOTALES CON EL FUNCIONAMIENTO DE TODOS LOS TRIGGER:

Screenshot_10

 

 

/**********************************************************************************************************************************************************************/

/***********************************************                                         CONSULTAS                                          ****************************************************************/

SELECT DDM_ALUMNOS.NombreAlumno AS ‘nombre’, DDM_ALUMNOS.FechaNacimiento AS ‘fechanacimiento’, DDM_EXPEDIENTES.FechaExpediente AS ‘fecha’, DDM_EXPEDIENTES.MotivoExpediente AS ‘motivo’, DDM_TUTORES.NombreResponsable AS ‘nombre’, DDM_TUTORES.Parentesco AS ‘parentesco’, DDM_TUTORES.TelefonoResponsable AS ‘telefono’
FROM DDM_ALUMNOS, DDM_EXPEDIENTES, DDM_TUTORES
WHERE DDM_ALUMNOS.id = DDM_EXPEDIENTES.alumno AND DDM_TUTORES.id = DDM_ALUMNOS.tutor;

Screenshot_11

SELECT COUNT(DDM_ALUMNOS.id) AS ‘Nº TOTAL DE ALUMNOS’, A.E AS ‘Nº TOTAL DE EXPEDIENTES’
FROM DDM_ALUMNOS, (SELECT COUNT(DDM_EXPEDIENTES.id) AS ‘E’
FROM DDM_EXPEDIENTES) A;

Screenshot_12

SELECT COUNT(DDM_EXPEDIENTES.id) AS ‘Nº TOTAL DE EXPEDIENTES’, C.A AS ‘Nº DE EXPEDIENTES 2014’, Q.A AS ‘Nº DE EXPEDIENTES 2015’
FROM DDM_EXPEDIENTES, (SELECT COUNT(DDM_EXPEDIENTES.id) AS ‘A’
FROM DDM_EXPEDIENTES
WHERE YEAR(DDM_EXPEDIENTES.FechaExpediente) = ‘2014’) C, (SELECT COUNT(DDM_EXPEDIENTES.id) AS ‘A’
FROM DDM_EXPEDIENTES
WHERE YEAR(DDM_EXPEDIENTES.FechaExpediente) = ‘2015’) Q;

Screenshot_13

SELECT COUNT(DDM_ALUMNOS.id) AS ‘Nº TOTAL DE ALUMNOS’, S.A AS ‘Nº DE ALUMNOS MAYORES DE EDAD’, ROUND ((S.A/COUNT(DDM_ALUMNOS.NombreAlumno))*100,2) AS ‘PORCENTAJE’
FROM DDM_ALUMNOS, (SELECT COUNT(DDM_ALUMNOS.NombreAlumno) AS ‘A’
FROM DDM_ALUMNOS
WHERE TRUNCATE((TO_DAYS(SYSDATE()) – TO_DAYS(DDM_ALUMNOS.Fechanacimiento)) / 365.25,0) > 17) S;

Screenshot_14

SELECT DDM_ALUMNOS.NombreAlumno AS ‘Alumno Más Viejo’, DDM_ALUMNOS.FechaNacimiento AS ‘Nacimiento Alumno Más Viejo’, A.B AS ‘Alumno Más Joven’, A.C AS ‘Nacimiento Alumno Más Joven’
FROM DDM_ALUMNOS, (SELECT DDM_ALUMNOS.NombreAlumno AS ‘B’, DDM_ALUMNOS.FechaNacimiento AS ‘C’
FROM DDM_ALUMNOS
WHERE DDM_ALUMNOS.FechaNacimiento IN(SELECT MAX(DDM_ALUMNOS.FechaNacimiento)
FROM DDM_ALUMNOS)) A
WHERE DDM_ALUMNOS.FechaNacimiento IN(SELECT MIN(DDM_ALUMNOS.FechaNacimiento)
FROM DDM_ALUMNOS);

Screenshot_15

SELECT DDM_TUTORES.NombreResponsable , DDM_TUTORES.parentesco, COUNT(DDM_ALUMNOS.tutor) AS ‘Nº de DDM_ALUMNOS tutelados’
FROM DDM_TUTORES,DDM_ALUMNOS
WHERE DDM_TUTORES.id = DDM_ALUMNOS.tutor
GROUP BY DDM_TUTORES.NombreResponsable, DDM_TUTORES.parentesco
HAVING COUNT(DDM_ALUMNOS.tutor) = (SELECT MAX(GG.A) FROM (
SELECT COUNT(DDM_ALUMNOS.tutor) AS A
FROM DDM_TUTORES,DDM_ALUMNOS
WHERE DDM_TUTORES.id = DDM_ALUMNOS.tutor
GROUP BY DDM_TUTORES.NombreResponsable, DDM_TUTORES.parentesco) GG);

Screenshot_16

/**********************************************************************************************************************************************************************/

/***********************************************                            FUNCIONES Y PROCEDURES                       ****************************************************************/

DROP PROCEDURE IF EXISTS NUMEXPEDIENTES;

DELIMITER //

CREATE PROCEDURE NUMEXPEDIENTES(IN nombre VARCHAR(250), OUT expediente TEXT)
BEGIN

DECLARE motivo TEXT DEFAULT “”;
DECLARE contador INT DEFAULT 0;
DECLARE numexp INT DEFAULT 0;

SET numexp = (SELECT COUNT(DDM_EXPEDIENTES.alumno)
FROM DDM_EXPEDIENTES, DDM_ALUMNOS
WHERE DDM_EXPEDIENTES.alumno = DDM_ALUMNOS.id AND DDM_ALUMNOS.NombreAlumno LIKE nombre);
IF numexp > 0 THEN
SET expediente = CONCAT(‘El alumno ‘,nombre,’ TIENE ‘,numexp,’ expedientes\n’);
ELSE
SET expediente = CONCAT(‘El alumno ‘,nombre,’ tiene’,numexp,’ expedientes’);
END IF;

WHILE contador < numexp DO
SET motivo = (SELECT DDM_EXPEDIENTES.MotivoExpediente
FROM DDM_EXPEDIENTES, DDM_ALUMNOS
WHERE DDM_EXPEDIENTES.alumno = DDM_ALUMNOS.id AND DDM_ALUMNOS.NombreAlumno LIKE nombre LIMIT contador,1);

SET expediente = CONCAT(expediente,’….’,contador+1,’ +’,motivo,’\n’);
SET contador = contador + 1;

END WHILE;

END //

DELIMITER ;

CALL NUMEXPEDIENTES(‘Alba Grau Pérez’,@a);
SELECT @a;

CALL NUMEXPEDIENTES(‘Pablo Gea Sanz’,@a);
SELECT @a;

CALL NUMEXPEDIENTES(‘Rafael Gil Rilo’,@a);
SELECT @a;

Screenshot_17

DROP PROCEDURE IF EXISTS TUTORES;

DELIMITER //

CREATE PROCEDURE TUTORES(IN nombre VARCHAR(250), OUT resultado TEXT)
BEGIN

DECLARE tutor TEXT DEFAULT “”;
DECLARE contador INT DEFAULT 0;
DECLARE numtute INT DEFAULT 0;
SET numtute = (SELECT COUNT(DDM_ALUMNOS.id)
FROM DDM_ALUMNOS, DDM_TUTORES
WHERE DDM_ALUMNOS.tutor = DDM_TUTORES.id AND DDM_TUTORES.NombreResponsable LIKE nombre);

IF numtute > 0 THEN
SET resultado = CONCAT(‘El tutor: ‘,nombre,’ tiene ‘,numtute,’ tutelados.\n’);
ELSE
SET resultado = CONCAT(‘El tutor: ‘,nombre,’ tiene ‘,numtute,’ tutelado.\n’);
END IF;

WHILE contador < numtute DO
SET tutor = (SELECT DDM_ALUMNOS.NombreAlumno
FROM DDM_ALUMNOS, DDM_TUTORES
WHERE DDM_ALUMNOS.tutor = DDM_TUTORES.id AND DDM_TUTORES.NombreResponsable LIKE nombre LIMIT contador, 1);
SET resultado = CONCAT(resultado,’…’,contador + 1,’ +’,tutor,’\n’);
SET contador = contador + 1;

END WHILE;
END //

DELIMITER ;

CALL TUTORES(‘Alberto López Gala’,@b);
SELECT @b;

CALL TUTORES(‘Antonio Abad Pérez’,@b);
SELECT @b;

CALL TUTORES(‘Alicia Vázquez Egea’,@b);
SELECT @b;

CALL TUTORES(‘José Mateo Soto’,@b);
SELECT @b;

Screenshot_18

DROP FUNCTION IF EXISTS FTUTORES;

DELIMITER //

CREATE FUNCTION FTUTORES( nombre VARCHAR(250) )
RETURNS TEXT

BEGIN

DECLARE alum TEXT DEFAULT “”;
DECLARE contador INT DEFAULT 0;
DECLARE numalu INT DEFAULT 0;
DECLARE resultado TEXT DEFAULT “”;

SET numalu = (SELECT COUNT(DDM_TUTORES.id)
FROM DDM_TUTORES, DDM_ALUMNOS
WHERE DDM_ALUMNOS.tutor = DDM_TUTORES.id AND DDM_TUTORES.NombreResponsable LIKE nombre);

IF numalu > 0 THEN
SET resultado = CONCAT(‘El tutor: ‘,nombre,’ tiene ‘,numalu,’ tutelados\n’);
ELSE
SET resultado = CONCAT(‘El tutor: ‘,nombre,’ no tiene ningun alumno tutelado\n’);
END IF;

WHILE contador < numalu DO
SET alum = (SELECT DDM_ALUMNOS.NombreAlumno
FROM DDM_ALUMNOS, DDM_TUTORES
WHERE DDM_ALUMNOS.tutor = DDM_TUTORES.id AND DDM_TUTORES.NombreResponsable LIKE nombre LIMIT contador, 1);
SET resultado = CONCAT(resultado,’—>’,contador + 1,’ +’,alum,’\n’);
SET contador = contador + 1;
END WHILE;

RETURN(resultado);

END //

DELIMITER ;

SELECT FTUTORES(‘José Mateo Soto’);

SELECT FTUTORES(‘Alicia Vázquez Egea’);

SELECT FTUTORES(‘Antonio Abad Pérez’);

SELECT FTUTORES(‘Alberto López Gala’);

Screenshot_19

/* ************************************************************************************************************ */
/* ************************************ CASE **************************************************************** */

DROP FUNCTION IF EXISTS NOMBRETUTOR;

DELIMITER //

CREATE FUNCTION NOMBRETUTOR(nombre INT)

RETURNS TEXT

BEGIN

DECLARE nombretotal TEXT DEFAULT ‘NO FUNCIONA’;

CASE nombre
WHEN 1 THEN SET nombretotal = ‘Jose’;
WHEN 2 THEN SET nombretotal = ‘David’;
ELSE
SET nombretotal = ‘EL NUMERO DEL MES INTRODUCIDO ES INCORRECTO DEBE SER UN NUMERO DEL 1 AL 2’;
END CASE;

RETURN(nombretotal);

END //

DELIMITER ;

SELECT NOMBRETUTOR(‘1’);

SELECT NOMBRETUTOR(‘2’);

Screenshot_20

/*************************************************************************************************************/
/********************************************** MID procedure ***********************************************/

DROP PROCEDURE IF EXISTS NOMBREMID;

DELIMITER //

CREATE PROCEDURE NOMBREMID(IN nombre VARCHAR(250), OUT resultado TEXT)
BEGIN
DECLARE contador INT DEFAULT 0;
DECLARE numletras TEXT DEFAULT “”;
DECLARE consumid TEXT DEFAULT “”;

SET numletras = (SELECT CHARACTER_LENGTH(nombre));
SET resultado = CONCAT(‘El nombre introducido tiene: ‘,numletras,’caracteres\n’);
WHILE contador < numletras DO
SET consumid = (SELECT MID(nombre,contador + 1,1));
SET resultado = CONCAT(resultado,’ Letra: ‘,consumid);
SET contador = contador + 1;

END WHILE;

END //

DELIMITER ;

CALL NOMBREMID(‘David’,@c);
SELECT @c;

CALL NOMBREMID(‘Jara’,@c);
SELECT @c;

CALL NOMBREMID(‘Fernando’,@c);

SELECT @c;

CALL NOMBREMID(‘Jose’,@c);
SELECT @c;

CALL NOMBREMID(‘Adrian’,@c);
SELECT @c;

Screenshot_21

/*************************************************************************************************************/
/********************************************** MID FUNCION ***********************************************/

DROP FUNCTION IF EXISTS NOMBREMIDF;

DELIMITER //

CREATE FUNCTION NOMBREMIDF(nombre VARCHAR(250))
RETURNS TEXT
BEGIN
DECLARE contador INT DEFAULT 0;
DECLARE numletras TEXT DEFAULT “”;
DECLARE consumid TEXT DEFAULT “”;
DECLARE resultado TEXT DEFAULT “”;

SET numletras = (SELECT LENGTH(nombre));
SET resultado = CONCAT(‘El nombre introducido: ‘,nombre,’ tiene ‘,numletras,’ caracteres. \n’);
WHILE contador < numletras DO
SET consumid = (SELECT MID(nombre,contador + 1,1));
SET resultado = CONCAT(resultado,’ Letra: ‘,consumid);
SET contador = contador + 1;

END WHILE;

RETURN(resultado);

END //

DELIMITER ;

SELECT NOMBREMIDF(‘David’);

SELECT NOMBREMIDF(‘Jara’);

SELECT NOMBREMIDF(‘Fernando’);

SELECT NOMBREMIDF(‘Jose’);

SELECT NOMBREMIDF(‘Adrian’);

Screenshot_22

 

 

Gracias por leer el blog. Saludos, @DavidDeMaya.

Please follow and like us:
0

Un comentario sobre “Bases De Datos Relacionales, MYSQL. Diseño Físico, Triggers, Insertado De Datos, Consultas, Procedures y Funciones.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.