Está en la página 1de 15

Universidad de Costa Rica

Sede Del Pacífico

Tarea 01

Profesor
Aron Galagarza

Estudiante
Oscar Ramírez Montiel

Carne
A75195

2011

Nota: Profesor el script que yo le envía va con documentación interna para


saber a que corresponde cada sentencia.
1. Definición de Datos

1.1 Libro (signatura, autor, titulo, editor, clase) Usuario (carnet, nombre, dirección)

create table libro

( signatura char (20),

autor char(50) not null,

titulo char(50) not null,

editor char (30) not null,

clase char(30) not null );

1.2 Usuario (carnet, nombre, direccion)

create table Usuario(

carnet char(10) not null,

nombre char(50) not null,

direccion char (100) not null);

1.3 Clase (clave, tiempo_de_prestamo)

create table clase(

clave char (20) not null,

tiempo_de_prestamo char(50) not null);

1.4 Prestamo (signatura, carnet, fecha_inicio, fecha_fi n)

create table Prestamo(

signatura char(20) not null,

carnet char(10) not null,

fecha_inicio date not null,


fecha_fin date not null );

A) Definición de claves ajenas


Para este punto hay que crear claves primarias en las tablas a las que se hace referencias
por esto es que primero se hace la sentencia para asignar clave primaria y luego ya se
puede crear la clave ajena.

A.1

alter table clase

add primary key(clave);

alter table libro

add foreign key (clase) references clase on delete set null;

A.2

alter table libro

add primary key (signatura);

alter table prestamo

add foreign key (signatura) references libro on delete set null;

A.3

alter table usuario

add primary key(carnet);

alter table prestamo

add foreign key(carnet) references usuario on delete set null;


A) Agregar a la tabla Usuario el campo Fecha_Ingreso (que sea obligatorio)

alter table Usuario

add Fecha_Ingreso integer not null;

B) Agregar a la tabla Libro el campo Prestado (que sea obligatorio), y asignarle por
defecto el valor 1.

alter table libro

add Prestado char(30) default 1 not null;

C) Definir el dominio “TIPO_EDAD”, como un entero entre 0 y 120, y añadir el


atributo Edad del usuario

Nota: el dominio no se puede crear ya que la sentencia no compila debido sino me equivoco a un
problema de version de oracle, solo se puede crear el campo edad para agregarlo al usuario.

alter table usuario

add Edad char(30) not null

D) Eliminando tablas

drop table prestamo;

drop table libro;

drop table clase;

drop table usuario;

2. Restricciones

2.1 Cambiar la definición de la restricción de clave primaria de la tabla Departamentos para


asignarle el nombre dep_pk.

alter table departamentos

drop primary key cascade;

alter table departamentos


add constraint dep_pk primary key(codigo_dpto);

alter table areas

add foreign key(departamento) references departamentos;

2.2 Añadir la regla de negocio de que los profesores sólo pueden tener una dedicación de
tiempo completo (TC), o parcial de 6 horas (6 h) o de 3 horas (3 h).
Comprobar que se ha modelado bien intentando modificar la dedicación del profesor con
código=1 al valor ‟20‟ y observando el mensaje de error que se
produce.

alter table profesores

add constraint dedicacion_profesores check (dedicacion='TC' OR dedicacion= '6 h' or dedicacion= '3 h');

update profesores

set dedicacion='20' where codigo=1;

Nota: El paso anterior No deja actualizar hacerlo por la restricción que se creó primero.

2.3 Comprobar cuales son las restricciones que están definidas en la tabla Locales.
Una de ellas no es necesaria al ser redundante. Detectarla y eliminarla. Realizar alguna
operación de tipo DML para demostrar que aunque dicha restricción se ha
eliminado, en realidad se sigue cumpliendo gracias a otra restricción.

desc locales;

select * from USER_CONSTRAINTS where table_name = 'locales';

alter table locales

drop constraint SYS_C009680 CASCADE;

insert into locales values('','laboratorio','1',67,'e4','planta1');


2.4 Desactivar la restricción NOT NULL en la columna nombre de la tabla Departamentos.
Comprobar mediante alguna operación UPDATE que está
desactivada. Volver a intentar activarla y averiguar qué efecto produce el cambio producido
por la operación anterior. Resolver la situación de forma que la
restricción queda activada.

desc departamentos;

alter table departamentos

disable constraint SYS_C009649 cascade;

update departamentos

set nombre='' where codigo_dpto='DER';

ALTER TABLE departamentos

enable constraint SYS_C009649;

update departamentos

set nombre='Matematica' where codigo_dpto='DER';

alter table departamentos

enable constraint SYS_C00964;

2.5 Definir la regla de negocio de que una asignatura tiene una hora semanal de
clase (de teoría y/o de práctica) por cada 3 créditos. Comprobar antes de añadirla al
esquema, que dicha regla se cumple con los datos actuales.

update asignaturas

set creditos=9 where siglas= 'CEm'; 'la condicion no se cumple'


alter table asignaturas

add constraint restric_creditos_asignatura check(CREDITOS/3=HORAS_TEORIA+HORAS_PRACTICA);

3. Manipulación de Datos

3.1 Se incorpora una nueva área de conocimiento al departamento de Informática:


código: ISA, nombre: Ingeniería de Sistemas y Automática

insert into areas values('ISA','Ingenieria de Sistemas y Automatica','INF');

3.2 Eliminar de la BD los profesores que no están en activo y que no son asociados.

delete from profesores where activo='0' and categoria='CEU' or activo='0' and categoria='TEU' or

activo='0' and categoria= 'TU' or activo='0' and categoria='TEUi';

3.3 Aumentar la capacidad de las aulas de clase y laboratorios en un 10%.

update locales

set capacidad= capacidad*1.10 where nombre like'Au%' or nombre like 'La%';

3.4 El área de conocimiento EIO (Estadística e Investigación Operati va) pasa del
Departamento de Informática al Departamento de Matemáticas, y por tanto, todos
sus profesores también cambian de departamento.

update areas

set departamento= 'MAT' where codigo='EIO';

3.5 Crear la tabla BAJAS con el código, nombre y categoría (atributos iguales a los de la
tabla de profesores). Añadirle los datos de los profesores (con una subconsulta) que no
están en activo en el centro y quitarlos de la tabla de Profesores.

create table BAJAS(

codigo number(38,0) not null,

nombre char(30) not null,

categoria char(30) not null,


primary key (codigo));

insert into bajas value(select codigo,nombre_pila,categoria from profesores where activo='0');

delete from profesores where activo='0';

4. Consultas

Consulta 4.1: Listar todos los datos disponibles de todos los departamentos.

select * from departamentos;

Consulta 4. 2: Listar el código y nombre de las áreas de conocimiento.

select codigo, nombre from areas;


Consulta 4. 3: Listar los tipos de categorías que tienen los profesores.

select categoria from profesores;

Consulta 4.4: Listar, código y nombre (nombre de pila y apellidos) de los profesores en activo (1=sí,
0=no).

select codigo, nombre_pila, apellido1,apellido2 from profesores where activo='1';


Consulta 4.5: Listar código y nombre de los profesores con código mayor de 20 y menor de 40.

select codigo, nombre_pila from profesores where codigo>20 and codigo<40;


Consulta 4.6: Listar los profesores que son numerarios (categorías “TU‟, “CEU‟ o “TEU‟).

select codigo, nombre_pila from profesores where categoria in ('TU','CEU','TEU');

Consulta 4.7: Listar los profesores que contienen “Ruiz‟ en su primer o segundo apellidos

select nombre_Pila from profesores where apellido1='Ruiz' or apellido2='Ruiz';

Consulta 4.8: Devolver el nombre y los apellidos de todos los profesores (con las primeras
letras en mayúsculas) que pertenezcan al departamento de informática y cuya dedicación sea
completa (“TC‟ )

select initcap(nombre_pila), initcap(apellido1), initcap(apellido2) from profesores inner join areas on


profesores.AREA=areas.CODIGO where profesores.DEDICACION='TC' and areas.DEPARTAMENTO='INF';
Consulta 4.9: Devolver el nombre y los apellidos de los profesores que den clase en locales con
capacidad mayor que 50 personas. Devolver el resultado en letras minúsculas.

select distinct lower(nombre_pila),lower(apellido1),lower(apellido2)from


profesores,docencia,localeswhere DOCENCIA.profesor= profesores.CODIGO and
docencia.local=locales.codigo and locales.CAPACIDAD >50;
Consulta 4.10: Seleccionar la periodicidad de las asignaturas impartidas por los profesores que
pertenezcan a cualquier área del departamento de informática (“ INF‟ ).

select docencia.PERIODICIDAD from docencia inner join(profesores inner join areas on


profesores.AREA=areas.CODIGO) on docencia.PROFESOR=profesores.codigo where
areas.DEPARTAMENTO='INF';

Consulta 4.11: Seleccionar las asignaturas y el código del profesor que las imparte que cumplan
que sus horas de teoría no son más que el 10% de las horas de práctica.

select asignaturas.NOMBRE, profesores.CODIGO from asignaturas,profesores,docencia where


docencia.PROFESOR=profesores.codigo and docencia.SIGLAS=asignaturas.SIGLAS and
asignaturas.HORAS_TEORIA<= (asignaturas.HORAS_PRACTICA*1.10);

En esta otra consulta no arroja resultados ya que no hay horas teoría que sean menos del 10% de las
horas práctica, por lo tanto la condición de la consulta no se cumple

Consulta 4.12: Seleccionar los nombres de los profesores a tiempo completo o de las asignaturas
anuales.
select distinct nombre_pila from asignaturas,profesores,docencia where
docencia.PROFESOR=profesores.codigo and asignaturas.SIGLAS=docencia.SIGLAS and
profesores.DEDICACION='TC' and asignaturas.ANUALIDAD='A';

Consulta 4. 13: ¿Existe algún código de área que sea igual que el código de algún local?

Según el dato que arroja la consulta no existe ningún código de area que sea igual a un código de
algún loca.

select areas.CODIGO from areas,locales where areas.CODIGO=locales.CODIGO;

Consulta 4.14: Obtener las siglas de aquellas asignaturas de las que no se imparte
docencia.

select distinct asignaturas.SIGLAS from docencia,asignaturas

where docencia.SIGLAS(+)asignaturas.SIGLAS;

También podría gustarte