Está en la página 1de 8

REPÚBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN UNIVERSITARIA


UNIVERSIDAD DR. JOSÉ GREGORIO HERNÁNDEZ
FACULTAD DE INGENIERÍA
BASE DE DATOS
CARRERA SISTEMAS

CÓDIGO DEL EJERCICIO

ELABORADO POR:

Br. Diego Marín


C.I: 30.207.007

Tutor Académico

Profa. Marisela Zabala


C.I: 11.948.017

Maracaibo, marzo del 2020


ENUNCIADO.

Se desea tener una base de datos con la siguiente información acerca de los alumnos de una
academia de idiomas donde se imparten varios cursos:

 Información acerca de los alumnos, que constará de su nombre y apellidos, un código único
para cada alumno, su dirección, fecha de nacimiento y sexo (‘H’ o ‘M’).
 Estos alumnos estarán matriculados en un sólo curso cada uno. Cada curso tendrá un
nombre, un código único que lo identifica, el número máximo de alumnos recomendado, un
profesor, la fecha de inicio y de finalización del curso y el número de horas del curso.
 Los profesores tendrán una ficha en la academia donde se especifican sus datos personales y
los datos del contrato. Es decir, nombre, DNI, dirección, titulación, cuota por hora.

Se pide:

1. Generar las siguientes tablas para guardar esta información

TABLA ALUMNOS TABLA CURSOS TABLA PROFESORES


Column Name Column Name Column Name
------------------ ------------------ ------------------
NOMBRE NOMBRE_CURSO NOMBRE
APELLIDO1 COD_CURSO APELLIDO1
APELLIDO2 DNI_PROFESOR APELLIDO2
DNI MAXIMO_ALUMNOS DNI
DIRECCION FECHA_INICIO DIRECCION
SEXO FECHA_FIN TITULO
FECHA_NACIMIENTO NUM_HORAS GANA
CURSO ------------------ ------------------
------------------ ------------------ ------------------

En las definiciones establecer las siguientes restricciones:

 No es posible dar de alta un alumno si no se matricula en un curso.


 La información del número de horas del curso es imprescindible para almacenarlo.
 El campo GANA de la tabla PROFESORES no puede estar en ningún caso vacío.
 Dos cursos no pueden llamarse igual. Lo mismo le pasa a los profesores.
 Podemos identificar las tuplas de las tablas CURSOS mediante el atributo CODIGO y
PROFESORES y ALUMNOS usando el DNI.
 Cumplir la relación normal entre fecha comienzo y fecha fin (orden cronológico).
 Los valores para el atributo sexo son sólo M y H (en mayúsculas).
 Se ha de mantener la regla de integridad de referencia.

NOTA: Algunos ejercicios tienen errores que debe probar (para ver el tipo y mensaje del error) y
corregir.
DESARROLLO.

MariaDB [(none)]> CREATE DATABASE academia;


Query OK, 1 row affected (0.22 sec)

MariaDB [(none)]> USE academia;


Database changed

MariaDB [academia]> CREATE TABLE alumnos (


-> nombres VARCHAR(20) NOT NULL,
-> apellido1 VARCHAR(15) NOT NULL,
-> apellido2 VARCHAR(15) NOT NULL,
-> dni INT NOT NULL PRIMARY KEY,
-> direccion VARCHAR(20) NOT NULL,
-> sexo CHAR(1) NOT NULL CHECK (sexo = 'H' OR sexo = 'M'),
-> fecha_nac DATE NOT NULL, CURSO INT NOT NULL
-> );
Query OK, 0 rows affected (0.85 sec)

MariaDB [academia]> CREATE TABLE cursos (


-> nombre VARCHAR(15) NOT NULL,
-> codcurso INT NOT NULL PRIMARY KEY,
-> dniprofesor INT NOT NULL,
-> max_alumnos INT NOT NULL CHECK (max_alumnos >= '10'),
-> fecha_i DATE,
-> fecha_f DATE NOT NULL CHECK (fecha_f > fecha_i),
-> n_horas INT NOT NULL CHECK (n_horas >= '100')
-> );
Query OK, 0 rows affected (0.31 sec)

MariaDB [academia]> CREATE TABLE profesores (


-> nombres VARCHAR(20) NOT NULL,
-> apellido1 VARCHAR(15) NOT NULL,
-> apellido2 VARCHAR(15) NOT NULL,
-> dni INT NOT NULL PRIMARY KEY,
-> direccion VARCHAR(20) NOT NULL,
-> titulo VARCHAR(15) NOT NULL,
-> gana INT NOT NULL
-> );
Query OK, 0 rows affected (0.71 sec)
ENUNCIADO.

2. Insertar las siguientes tuplas:

TABLA PROFESORES
NOMBRE APELLIDO1 APELLIDO2 DNI DIRECCION TITULO GANA
Juan Arch López 32432455 Puerta Negra, 4 Ing. Informática 7500
María Oliva Rubio 43215643 Juan Alfonso 32 Lda. Fil. Inglesa 5400

TABLA CURSOS
NOMBRE_CURSO COD_CURSO DNI_PROF MAX_ALU FECHA_INI FECHA_FIN NUM_HORAS
Inglés Básico 1 43215643 15 1-nov-00 22-dic-00 120
Administración Li 2 32432455 1-sept-00 80

TABLA ALUMNOS
NOMBRE APELLIDO1 APELLIDO2 DNI DIRECCION SEXO FECHA_NAC CURSO
Lucas Manilva López 123523 Alhamar 3 V 1-nov-79 1
Antonia López Alcantara 2567567 Maniquí 21 M 2
Manuel Alcantara Pedrós 3123689 Julian 2 2
José Pérez Caballar 4896765 Jarcha 5 V 3-feb-77 1

3. Insertar la siguiente tupla en ALUMNOS:


NOMBRE APELLIDO1 APELLIDO2 DNI DIRECCION SEXO FECHA_NAC CURSO
Sergio Navas Retal 123523 P

4. Añadir el campo edad de tipo numérico a la tabla PROFESORES.


5. Añadir las siguientes restricciones:
 La edad de los profesores está entre 18 y 65 años.
 No se puede añadir un curso si su número de alumnos máximo es menor que 10.
 El número de horas de los cursos debe ser mayor que 100.
6. Eliminar la restricción que controla los valores permitidos para el atributo sexo.
7. Se dice que cada alumno ha de estar matriculado en un solo curso. ¿Esto quiere decir que el
atributo CURSO de la tabla ALUMNOS ha de ser UNIQUE? Pruebe a introducir la
restricción y ver si confirma esta hipótesis.
8. Eliminar la restricción de tipo NOT NULL del atributo GANA.
9. Insertar restricción no nula en el campo FECHA_INICO de CURSOS.
10. Cambiar la clave primaria de Profesor al nombre y apellidos.

11. Insertar las siguientes tuplas en alumnos:


NOMBRE APELLIDO1 APELLIDO2 DNI DIRECCION TITULO GANA
Juan Arch López 32432455 Puerta Negra, 4 Ing. Informática NULL

NOMBRE APELLIDO1 APELLIDO2 DNI DIRECCION SEXO FECHA_NAC CURSO


María Jaén Sevilla 789678 Martos 5 M 10-mar-77 3
12. La fecha de nacimiento de Antonia López está equivocada. La verdadera es 23 de diciembre
de 1976.
13. Cambiar a Antonia López al curso de código 5.
14. Eliminar la profesora Laura Jiménez
15. Crear una tabla de uso temporal llamada NOMBRE DE ALUMNOS que tenga un solo
atributo (NOMBRE_COMPLETO) de tipo cadena de caracteres y con el contenido de la
tabla alumnos en esos campos. Observe que no hay restricción de clave primaria para esta
tabla.
16. Borrar las tablas.

DESARROLLO

MariaDB [academia]> ALTER TABLE alumnos ADD INDEX (curso);


Query OK, 0 rows affected (0.57 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [academia]> ALTER TABLE cursos ADD INDEX (dniprofesor);


Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [academia]> ALTER TABLE cursos ADD UNIQUE (nombre);


Query OK, 0 rows affected, 1 warning (0.34 sec)
Records: 0 Duplicates: 0 Warnings: 1

MariaDB [academia]> ALTER TABLE alumnos ADD FOREIGN KEY (curso)


REFERENCES cursos (codcurso);
Query OK, 0 rows affected (0.87 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [academia]> ALTER TABLE cursos ADD FOREIGN KEY (dniprofesor)


REFERENCES profesores (dni);
Query OK, 0 rows affected (0.54 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [academia]> insert into Profesores (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, TITULO, GANA) values ('Juan Andres','Arch','Lopez','32432455','Puerta
Negra, 4','Ing. Informatica','7500');
Query OK, 1 row affected, 1 warning (0.10 sec)

MariaDB [academia]> insert into Profesores (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, TITULO, GANA) values ('Maria Carolina','Oliva','Rubio','43215643','Juan
Alfonso 32','Lda. Fil. Inglesa','5400');
Query OK, 1 row affected, 1 warning (0.05 sec)

MariaDB [academia]> insert into Cursos (NOMBRE, CODCURSO, dniprofesor,


MAX_ALUMNOS, FECHA_I, FECHA_F, N_HORAS) values ('Ingles
Basico','1','43215643','15','2000-11-01','2000-12-22','120');
Query OK, 1 row affected (0.08 sec)
MariaDB [academia]> insert into Cursos (NOMBRE, CODCURSO, dniprofesor,
MAX_ALUMNOS, FECHA_I, FECHA_F, N_HORAS) values ('Administracion
Linux','2','32432455','','2000-09-01','','80');
Query OK, 1 row affected, 3 warnings (0.04 sec)

MariaDB [academia]> insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, SEXO, FECHA_NAC, curso) values ('Lucas
Manuel','Manilva','Lopez','123523','Alhamar 3','v','1979-11-01','1');
Query OK, 1 row affected (0.04 sec)

MariaDB [academia]> insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, SEXO, FECHA_NAC, curso) values ('Antonia
Maria','Lopez','Alcantara','2567567','Maniqui 21','M','','2');
Query OK, 1 row affected, 1 warning (0.03 sec)

MariaDB [academia]> insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, SEXO, FECHA_NAC, curso) values ('Manuel
Jose','Alcantara','Pedros','3123689','Julian 2','','','2');
Query OK, 1 row affected, 1 warning (0.03 sec)

MariaDB [academia]> insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, SEXO, FECHA_NAC, curso) values ('Jose Dani
el','Perez','Caballar','4896765','Jarcha 5','v','1977-02-03','1');
Query OK, 1 row affected (0.04 sec)

MariaDB [academia]> insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, SEXO, FECHA_NAC, curso) values ('Sergio
Jose','Navas','Retal','123523','','p','','');
ERROR 1062 (23000): Duplicate entry '123523' for key 'PRIMARY'

MariaDB [academia]> insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, SEXO, FECHA_NAC, curso) values ('Sergio
Jose','Navas','Retal','789456123','','H','','1');
Query OK, 1 row affected, 1 warning (0.03 sec)

MariaDB [Academia]> alter table Profesores add EDAD int not null check (EDAD >= '18'
and EDAD <= '65');
Query OK, 0 rows affected (0.61 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [Academia]> alter table Alumnos modify SEXO char(1);


Query OK, 0 rows affected (0.37 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [Academia]> alter table Alumnos add unique (curso);
ERROR 1062 (23000): Duplicate entry '1' for key 'curso_2'

RESPUESTA:
No puede ser UNIQUE, diferentes alumnos pueden ver un mismo curso.

MariaDB [Academia]> alter table Profesores Modify GANA int;


Query OK, 0 rows affected (0.25 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [Academia]> Alter table Cursos modify FECHA_I date not null;
Query OK, 2 rows affected (0.93 sec)
Records: 2 Duplicates: 0 Warnings: 0

MariaDB [Academia]> alter table Profesores Modify NOMBRES varchar(20) not null
primary key, APELLIDO1 varchar(15) not null primarykey, APELLIDO2 varchar(15) not
null primary key;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the
right syntax to use near 'varchar(15) not null primary key, APELLIDO2 varchar(15) not null
primary key' at line 1

RESPUESTA:
No puede haber más de una llave primaria en una tabla, aquí ya hay una llave primaria
definida.

MariaDB [Academia]> Insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, TITULO, GANA) values ('Juan Andres','Arch','Lopez','32432455','Puerta
Negra, 4','Ing. Informatica','');
ERROR 1054 (42S22): Unknown column 'TITULO' in 'field list'

RESPUESTA:
No se pueden insertar campos inexistentes en una tabla y esta no posee un código de curso.

MariaDB [Academia]> Insert into Alumnos (NOMBRES, APELLIDO1, APELLIDO2, DNI,


DIRECCION, SEXO, FECHA_NAC, curso) values ('Maria
Jose','Jaen','Sevilla','789678','Martos 5','M','1977-03-10','3');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`academia`.`alumnos`, CONSTRAINT `alumnos_ib
fk_1` FOREIGN KEY (`curso`) REFERENCES `cursos` (`CODCURSO`))

RESPUESTA:
No se puede insertar porque el curso 3 no existe.

MariaDB [Academia]> update Alumnos set FECHA_NAC = '1976-12-23' where NOMBRES =


'Antonia Maria';
Query OK, 1 row affected (0.31 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [Academia]> update Alumnos set curso = '5' where NOMBRES = 'Antonia Maria';
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`academia`.`alumnos`, CONSTRAINT `alumnos_ib
fk_1` FOREIGN KEY (`curso`) REFERENCES `cursos` (`CODCURSO`))

RESPUESTA:
El código 5 de curso no existe.

MariaDB [Academia]> delete from Profesores where NOMBRES = 'Laura Jimenez';


Query OK, 0 rows affected (0.00 sec)

RESPUESTA:
Se ha realizado exitosamente a pesar de que ese registro no existe.

MariaDB [Academia]> insert into NOMBRE_DE_ALUMNOS (NOMBRE_COMPLETO)


select NOMBRES, APELLIDO1, APELLIDO2 from Alumnos;
ERROR 1136 (21S01): Column count doesn't match value count at row 1

RESPUESTA:
No se pueden insertar datos de tres campos en uno solo, en este caso de la tabla temporal.

MariaDB [Academia]> drop table Alumnos;


Query OK, 0 rows affected (0.16 sec)

MariaDB [Academia]> drop table Cursos;


Query OK, 0 rows affected (0.10 sec)

MariaDB [Academia]> drop table Profesores;


Query OK, 0 rows affected (0.08 sec)

También podría gustarte