Sunteți pe pagina 1din 9

Universidad Nacional de Asuncin Facultad Politcnica

Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

1. En base al DER, cree las tablas correspondientes, con los tipos de datos establecidos. Defina la clave
primaria, los constraints de no nulidad y de integridad referencial.
CREATE TABLE ACTA (
NUMERO_ACTA
NUMBER(8) NOT NULL,
FECHA_ACTA
DATE NOT NULL,
TIPO_EXAMEN
VARCHAR2(5) NOT NULL,
CONSTRAINT PKACTA
PRIMARY KEY (NUMERO_ACTA)
);
CREATE TABLE CALIFICACIONES (
ID_MATRICULA
NUMBER(8) NOT NULL,
NUMERO_ACTA
NUMBER(8) NOT NULL,
PUNTAJE
NUMBER(3) NOT NULL,
CONSTRAINT PKCALIFICACIONES
PRIMARY KEY (ID_MATRICULA, NUMERO_ACTA)
);
CREATE TABLE CARRERAS (
NOMBRE_CARRERA
VARCHAR2(30) NOT NULL,
ID_CARRERA
NUMBER(5) NOT NULL,
TOTAL_HORAS
NUMBER(2) NOT NULL,
TITULO_HABILITANTE
VARCHAR2(30) NOT NULL,
FECHA_HABILITACION
DATE NOT NULL,
FECHA_CANCELACION
DATE NULL,
CONSTRAINT PKCARRERAS

27/10/2016

Pg. 1

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

);

Seccin

ABIQ-Cnel.Ov.

PRIMARY KEY (ID_CARRERA)

CREATE TABLE ESTUDIANTES (


NOMBRE
VARCHAR2(45) NOT NULL,
DIRECCION
VARCHAR2(45) NOT NULL,
CEDULA
NUMBER(8) NOT NULL,
APELLIDO
VARCHAR2(45) NOT NULL,
TELEFONO
VARCHAR2(15) NOT NULL,
TELEFONO_TRABAJO
VARCHAR2(15) NULL,
DIRECCION_TRABAJO
VARCHAR2(45) NULL,
E_MAIL
VARCHAR2(30) NULL,
FECHA_PRIMERA_INSCRIPCION DATE NULL,
FECHA_NACIMIENTO
DATE NOT NULL,
CONSTRAINT PKESTUDIANTES
PRIMARY KEY (CEDULA)
);
CREATE TABLE MATERIA_SECCION (
ID_CARRERA
NUMBER(5) NOT NULL,
ID_MATERIA
NUMBER(5) NOT NULL,
SECCION
VARCHAR2(1) NOT NULL,
PROFESOR
NUMBER(4) NULL,
CONSTRAINT PKMATERIA_SECCION
PRIMARY KEY (ID_CARRERA, ID_MATERIA, SECCION)
);
CREATE TABLE MATERIAS (
NOMBRE_MATERIA
VARCHAR2(45) NOT NULL,
ID_MATERIA
NUMBER(5) NOT NULL,
COSTO_MATERIA
NUMBER(7) NOT NULL,
CONSTRAINT PKMATERIAS
PRIMARY KEY (ID_MATERIA)
);
CREATE TABLE MATRICULA (
ID_MATRICULA
NUMBER(8) NOT NULL,
CEDULA
NUMBER(8) NOT NULL,
FECHA_INSCRIPCION
DATE NOT NULL,
FECHA_FIN_MATRICULA DATE NULL,
MOTIVO_CANCELACION
VARCHAR2(1) NULL,
ID_CARRERA
NUMBER(5) NULL,
ID_MATERIA
NUMBER(5) NULL,
SECCION
VARCHAR2(1) NULL,
CONSTRAINT PKMATRICULA
PRIMARY KEY (ID_MATRICULA),
CONSTRAINT UK_MATERIA
UNIQUE (
CEDULA,
ID_CARRERA,
ID_MATERIA,
SECCION
)

27/10/2016

Pg. 2

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

);
CREATE TABLE PROFESORES (
NOMBRE_PROFESOR
VARCHAR2(60) NOT NULL,
PROFESOR
NUMBER(4) NOT NULL,
DIRECCION_PROFESOR
VARCHAR2(45) NOT NULL,
TELEFONO_PROFESOR
VARCHAR2(15) NOT NULL,
E_MAIL_PROFESOR
VARCHAR2(30) NULL,
CONSTRAINT PKPROFESORES
PRIMARY KEY (PROFESOR)
);
CREATE TABLE PROGRAMA_CURRICULAR (
ID_MATERIA
NUMBER(5) NOT NULL,
ELECTIVA
VARCHAR2(1) NOT NULL,
ID_CARRERA
NUMBER(5) NOT NULL,
CARGA_HORARIA
NUMBER(1) NOT NULL,
CANT_CREDITOS
NUMBER(2) NOT NULL,
CONSTRAINT PKCARRERA_MATERIA
PRIMARY KEY (ID_MATERIA, ID_CARRERA)
);
ALTER TABLE CALIFICACIONES
ADD ( CONSTRAINT R_INS_CAL
FOREIGN KEY (ID_MATRICULA)
REFERENCES MATRICULA ) ;
ALTER TABLE CALIFICACIONES
ADD ( CONSTRAINT R_ACT_CAL
FOREIGN KEY (NUMERO_ACTA)
REFERENCES ACTA ) ;
ALTER TABLE MATERIA_SECCION
ADD ( CONSTRAINT R_PRO_MAT
FOREIGN KEY (PROFESOR)
REFERENCES PROFESORES ) ;
ALTER TABLE MATERIA_SECCION
ADD ( CONSTRAINT R_PRO_SEC
FOREIGN KEY (ID_MATERIA, ID_CARRERA)
REFERENCES PROGRAMA_CURRICULAR ) ;
ALTER TABLE MATRICULA
ADD ( CONSTRAINT R_MAT_MAT
FOREIGN KEY (ID_CARRERA, ID_MATERIA, SECCION)
REFERENCES MATERIA_SECCION ) ;
ALTER TABLE MATRICULA
ADD ( CONSTRAINT R_EST_MAT
FOREIGN KEY (CEDULA)
REFERENCES ESTUDIANTES ) ;

27/10/2016

Pg. 3

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

ALTER TABLE PROGRAMA_CURRICULAR


ADD ( CONSTRAINT R_MAT_CAR
FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIAS ) ;
ALTER TABLE PROGRAMA_CURRICULAR
ADD ( CONSTRAINT R_CAR_CAR
FOREIGN KEY (ID_CARRERA)
REFERENCES CARRERAS ) ;

2. Agregue los siguientes valores por defecto y reglas de control (a nivel de CHECK)
En la tabla PROGRAMA_CURRICULAR: La columna ELECTIVA slo pueden tener los
valores E y O (E= Electiva, O=Obligatoria). Por defecto el valor es E.
En la misma tabla, la columna CAN_CREDITOS puede valer de 6 a 12 crditos. El valor por
defecto es 6
En la tabla CARRERAS: La columna FECHA_HABILITACION debe asignarse por defecto con
la fecha del sistema.
En la tabla CARRERAS, si la FECHA_CANCELACION es asignada, ella debe ser mayor a la
FECHA_HABILITACION
En la tabla MATRICULA, la columna FECHA_INSCRIPCION debe asignarse por defecto con la
fecha del sistema. Asimismo, si la FECHA_FIN_MATRICULA est asignada, debe ser mayor a la
fecha_inscripcin. La FECHA_FIN_MATRICULA no puede ser nula si la columna
MOTIVO_CANCELACION es asignada.
En la tabla CALIFICACIONES, el puntaje slo puede estar entre 1 y 100.
ALTER TABLE PROGRAMA_CURRICULAR
MODIFY
(CANT_CREDITOS DEFAULT 6 CONSTRAINT CHK_CANTCREDITOS CHECK (CANT_CREDITOS
BETWEEN 6 and 12),
ELECTIVA
DEFAULT 'E' CONSTRAINT CHK_ELECTIVA CHECK (ELECTIVA IN ('E',
'O')));
ALTER TABLE CARRERAS
MODIFY
(FECHA_HABILITACION DEFAULT SYSDATE);
ALTER TABLE CARRERAS
ADD
(CONSTRAINT CHK_FECHACARR CHECK (FECHA_CANCELACION IS NULL OR
FECHA_CANCELACION > FECHA_HABILITACION));
ALTER TABLE MATRICULA
MODIFY
(FECHA_INSCRIPCION DEFAULT SYSDATE);

27/10/2016

Pg. 4

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

ALTER TABLE MATRICULA


ADD
(CONSTRAINT CHK_FCHMATR CHECK ((FECHA_FIN_MATRICULA IS NULL AND
MOTIVO_CANCELACION IS NULL) OR (MOTIVO_CANCELACION IS NOT NULL AND
FECHA_FIN_MATRICULA > FECHA_INSCRIPCION)));
ALTER TABLE CALIFICACIONES
ADD
(CONSTRAINT CHK_PUNTAJE CHECK (PUNTAJE BETWEEN 1 AND 100));

3. Agregue a la tabla CARRERAS la columna TOTAL_CREDITOS de tipo NUMBER(3). La columna


ser de tipo NOT NULL y por default tendr 0. Se validar que si total horas > 0, entonces
total_creditos tambin debe ser > 0.
ALTER TABLE CARRERAS
ADD
(TOTAL_CREDITOS NUMBER(3));
UPDATE CARRERAS SET TOTAL_CREDITOS = 0;
ALTER TABLE CARRERAS
MODIFY
(TOTAL_CREDITOS NOT NULL);
ALTER TABLE CARRERAS
ADD
(CONSTRAINT CHK_CREDITOS CHECK (NVL(TOTAL_HORAS,0) = 0 OR
(TOTAL_HORAS > 0 AND TOTAL_CREDITOS > 0)));

4. Cree comentarios para las tablas y columnas de CARRERAS segn el siguiente cuadro:
CARRERAS: Tabla de carreras
ID_CARRERA
NOMBRE_CARRERA
TOTAL_HORAS
TITULO_HABILITANTE
FECHA_HABILITACION
FECHA_CANCELACION
TOTAL_CREDITOS

Identificacin de la carrera
Nombre de la Carrera
Total de horas de la carrera
Nombre del ttulo que se otorga al estudiante
Fecha en la que se habilita la carrera
Fecha en que se cancela eventualmente la carrera
Total de crditos para la carrera

COMMENT ON TABLE CARRERAS IS 'Tabla de Carreras';


COMMENT ON COLUMN CARRERAS.ID_CARRERA IS 'Identificacin de la carrera';
COMMENT ON COLUMN CARRERAS.NOMBRE_CARRERA IS 'Nombre de la Carrera';
COMMENT ON COLUMN CARRERAS.TOTAL_HORAS
IS 'Total de horas de la carrera';
COMMENT ON COLUMN CARRERAS.TITULO_HABILITANTE IS 'Nombre del ttulo que se
otorga al estudiante';
COMMENT ON COLUMN CARRERAS.FECHA_HABILITACION IS 'Fecha en la que se habilita la
carrera';

27/10/2016

Pg. 5

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

COMMENT ON COLUMN CARRERAS.FECHA_CANCELACION


IS 'Fecha en que se cancela
eventualmente la carrera';
COMMENT ON COLUMN CARRERAS.TOTAL_CREDITOS IS 'Total de crditos para la carrera';

5. Se ha detectado que el Dpto. de Identificaciones expidi cdulas duplicadas. Las cdulas duplicadas
van seguidas de una letra (A, B, etc). Para incorporar alumnos con cdulas duplicadas debe
modificar urgentemente la estructura de BD y convertirla en un VARCHAR2 y extender la longitud a
12.
Recuerde que la columna CEDULA es PK en la tabla ESTUDIANTES y FK en MATRICULA.
Por ello primero debe:
Suprimir la PK de la tabla ESTUDIANTES con todos los constraints dependientes. El ndice
correspondiente a la PK tambin se borr? (Responda S o No).
Alterar la columna CEDULA (a VARCHAR2(12)) en la tabla ESTUDIANTES y en la tabla
MATRICULA. Como puede que la tabla tenga datos deber:
Renombrar la columna CEDULA a CEDULA2
Crear una nueva columna CEDULA de tipo VARCHAR2
Mover (con UPDATE) el valor de la CEDULA2 (campo anterior) al nuevo campo
CEDULA..
Definir la columna CEDULA2 como UNUSED.
Volver a crear la PK sobre la columna nueva de CEDULA de ESTUDIANTES
Definir la nueva columna CEDULA en MATRICULA como NOT NULL.
Agregar el constraint entre las tablas ESTUDIANTES y MATRICULA
ALTER TABLE ESTUDIANTES
DROP PRIMARY KEY CASCADE;
Para verificar si queda un ndice, puede hacer antes y despus la prueba:
SELECT INDEX_NAME FROM USER_INDEXES
WHERE TABLE_NAME = 'ESTUDIANTES';
Efectivamente determinar que SI se elimina tambin el ndice correspondiente
ALTER TABLE ESTUDIANTES RENAME COLUMN CEDULA TO CEDULA2;
ALTER TABLE MATRICULA RENAME COLUMN CEDULA TO CEDULA2;
ALTER TABLE ESTUDIANTES
ADD
(CEDULA VARCHAR2(12));
ALTER TABLE MATRICULA
ADD
(CEDULA VARCHAR2(12));
ALTER TABLE ESTUDIANTES
MODIFY CEDULA2 NULL;

27/10/2016

Pg. 6

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

ALTER TABLE MATRICULA


MODIFY CEDULA2 NULL;
UPDATE ESTUDIANTES
SET CEDULA = CEDULA2;
UPDATE MATRICULA
SET CEDULA = CEDULA2;
ALTER TABLE ESTUDIANTES
SET UNUSED COLUMN CEDULA2;
ALTER TABLE MATRICULA
SET UNUSED COLUMN CEDULA2;
ALTER TABLE ESTUDIANTES
ADD (CONSTRAINT PKESTUDIANTE PRIMARY KEY (CEDULA) );
ALTER TABLE MATRICULA
MODIFY
CEDULA NOT NULL;
ALTER TABLE MATRICULA
ADD
(CONSTRAINT R_ESTUDIANTE_MATRICULA FOREIGN KEY (CEDULA) REFERENCES
ESTUDIANTES(CEDULA));

6. En el ejercicio anterior verifique todas las columnas declaradas como UNUSED. Luego borre
definitivamente las columnas que quedaron como UNUSED.
SELECT * FROM USER_UNUSED_COL_TABS;
ALTER TABLE ESTUDIANTES DROP UNUSED COLUMNS;
ALTER TABLE MATRICULA DROP UNUSED COLUMNS;

7. Cree secuencias para las tablas CARRERAS, MATERIAS, MATRICULA. En todos los casos la
secuencia inicia de 1 y aumenta de 1 en 1. Verifique las secuencias creadas en la tabla correspondiente
del diccionario.
CREATE SEQUENCE SEQ_CARRERAS
START WITH 1
INCREMENT BY 1
NOCYCLE
NOCACHE;
CREATE SEQUENCE SEQ_MATERIAS
START WITH 1
INCREMENT BY 1
NOCYCLE
NOCACHE;

27/10/2016

Pg. 7

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

CREATE SEQUENCE SEQ_MATRICULA


START WITH 1
INCREMENT BY 1
NOCYCLE
NOCACHE;
SELECT SEQUENCE_NAME FROM USER_SEQUENCES;

8. Cree los scripts apropiados para insertar datos en las tablas CARRERAS y MATERIAS utilizando el
valor de las respectivas secuencias como ID.

9. Un ndice tambin puede ser definido por una funcin. Defina


INDX_APELLIDO_NOMBRE sobre la tabla ESTUDIANTES de la siguiente manera:

el

ndice

Apellido, Nombre (suprimiendo los espacios, e incorporando la coma entre apellido y nombre).
CREATE INDEX INX_APELLIDO_NOMBRE
ON ESTUDIANTES(RTRIM(APELLIDO)||', '||RTRIM(NOMBRE));

10. Agregue la columna SEXO VARCHAR2(1) a la tabla de ESTUDIANTES. Dicha columna podr
tener los valores M y F. Por defecto el valor ser M.
ALTER TABLE ESTUDIANTES
ADD
(SEXO VARCHAR2(1) DEFAULT 'M' CONSTRAINT CHK_SEXO CHECK (SEXO IN ('M','F')));

11. Asumiendo que la columna SEXO de la tabla de ESTUDIANTES tiene 2 valores posibles: F y M.
Defina el ice BMP_ESTUDIANTE01 sobre la columna SEXO.
CREATE BITMAP INDEX BMP_ESTUDIANTE01 ON ESTUDIANTES (SEXO);

12. Verifique los ndices creados hasta el momento sobre la tabla de ESTUDIANTES. Debe listar:
Nombre del ndice

Tipo de ndice Nombre de la columna Posicin de la Columna

SELECT I.INDEX_NAME, I.INDEX_TYPE,


C.COLUMN_NAME, C.COLUMN_POSITION
FROM USER_IND_COLUMNS C, USER_INDEXES I
WHERE I.INDEX_NAME = C.INDEX_NAME
AND
C.TABLE_NAME = 'ESTUDIANTES';

13. Prepare un script que genere a su vez un script (a traves del spool), para deshabilitar todos los
constraints de tipo FOREIGN KEY de las tablas creadas. Cuide para NO deshabilitar los constraints
de las tablas principales del ejercitarlo del modelo de PROYECTOS (Que empiezan con B_%).

27/10/2016

Pg. 8

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 5 Sentencias DDL

Seccin

ABIQ-Cnel.Ov.

Spool disableCons;
SELECT 'ALTER TABLE '|| table_name || ' DISABLE CONSTRAINT ' ||
constraint_name ||';'
FROM user_constraints
WHERE constraint_type like 'R'
AND
table_name NOT LIKE 'B\_%' ESCAPE '\';
Spool off;

14. Por error la tabla B_COMPRAS del esquema dado en clases, tiene el campo FECHA como
VARCHAR2. Altere la tabla para que sea de tipo DATE. Tenga en cuenta que existen datos en la
tabla, por lo que deber tener las mismas consideraciones que el ejercicio 5.
ALTER TABLE B_COMPRAS RENAME COLUMN FECHA TO FECHA2;
ALTER TABLE B_COMPRAS ADD (FECHA DATE);
UPDATE B_COMPRAS SET FECHA = TO_DATE(FECHA2, 'DD/MM/YYYY');
ALTER TABLE B_COMPRAS DROP COLUMN FECHA2;
ALTER TABLE B_COMPRAS MODIFY (FECHA NOT NULL);

27/10/2016

Pg. 9