Está en la página 1de 2

Ciencia de la Computación

Guía de Trabajos Prácticos Nº 5


Normalización y SQL
Utilizar para esta práctica cualquier motor de base de datos que interprete SQL, desde una consola. Se recomienda
utilizar SQL ITE.

1. Verificar que todas las tablas de la base de datos Personas, cuyo diagrama de entidad-relación se muestra a
continuación, cumplen con la 3ra Forma Normal.

2. Crear la base de datos personas.sqlite, y definir en ella las cuatro tablas. Seguir el ejemplo mostrado a continua-
ción.

$ sqlite3 personas.sqlite
sqlite> CREATE TABLE parentesco(
...> documento_origen bigint ,
...> documento_destino bigint ,
...> parentesco text ,
...> PRIMARY KEY( documento_origen , documento_destino ) );
sqlite>
...

3. Insertar por lo menos tres personas. Dos teléfonos en una persona, un teléfono en otra, y ninguno en la tercera.
Dos correos en una persona, uno en otra y ninguno en la tercera, y por lo menos dos relaciones de parentesco
entre las personas, siguiendo el ejemplo mostrado a continuación. Las fechas deben ingresarse con el siguiente
formato: ’A-M-D’ (por ejemplo ’1985-10-2’).

sqlite> INSERT INTO parentesco( documento_origen ,


...> documento_destino,
...> parentesco )
...> VALUES ( 13214518 , 30241522 , ’padre’ ),
...> ( 14521324 , 30241522 , ’madre’ ) ;

4. Consultar la lista completa de personas, ordenada por apellido y por nombre.

sqlite> SELECT * FROM persona ORDER BY apellido , nombre ;

5. Consultar el nombre y el apellido de una persona a partir de su número de documento.

sqlite> SELECT nombre , apellido


...> FROM persona
...> WHERE documento = 13214518 ;

6. Consultar las personas que nacieron antes de una fecha, mostrando apellido y nombre de manera prolija y la
edad en años, ordenada ascendentemente por edad.
sqlite> SELECT apellido || ’, ’ || nombre as nombre_completo,
...> CURRENT_DATE - fecha_de_nacimiento as edad
...> FROM persona
...> WHERE fecha_de_nacimiento < ’1976-1-1’
...> ORDER BY fecha_de_nacimiento ;

7. Consultar la descripción y el número de todos los teléfonos para una persona determinada.

sqlite> SELECT descripcion , telefono


...> FROM telefono WHERE documento = 13214518 ;

8. Indicar apellido y nombre de manera prolija, dirección, descripción y número de teléfono, para todos los teléfo-
nos de la base, ordenados por apellido y nombre.

sqlite> SELECT p.apellido || ’, ’ || p.nombre as nombre_completo,


...> p.direccion, t.descripcion, t.numero
...> FROM telefono t
...> JOIN persona p ON t.documento = p.documento
...> ORDER BY p.apellido, p.nombre ;

9. Indicar apellido y nombre de manera prolija e email para todas las personas que nacieron después de una fecha
determinada, ordenados por fecha de nacimiento.
10. Mostrar las relaciones de parentesco en forma textual.

sqlite> SELECT po.nombre || ’ ’ || po.apellido ||


...> ’ es ’ || par.parentesco || ’ de ’ ||
...> pd.nombre || ’ ’ || pd.apellido
...> FROM parentesco par
...> JOIN persona po ON par.documento_origen = po.documento
...> JOIN persona pd ON par.documento_destino = pd.documento ;

11. Armar al menos una consulta más que a su criterio resulte útil.

12. Modificar la fecha de nacimiento de una persona.

sqlite> UPDATE persona


...> SET fecha_de_nacimiento=’1950-12-5’
...> WHERE documento=13214518 ;

13. Eliminar una relación de parentesco.

sqlite> DELETE FROM parentesco


...> WHERE documento_origen = 14521324 AND
...> documento_destino = 30241522 ;

Utilizar el comando .exit para salir de la consola de SQL ITE.

También podría gustarte