Está en la página 1de 64

BASE DE DATOS AVANZADA

(301125A_611)

PROYECTO FINAL

NOMBRE DE LOS INTEGRANTES DEL GRUPO


JUAN CAMILO RENGIFO ROMERO COD: 1.120.571.608
LUIS SALAMANCA COD: 1113650449
CARLOS ANDRES ARENAS MEJIA COD: 1.116.251.138
JEISSON LENIS COD:
YADIR FABIAN BEJARANO COD: 1115066771

GRUPO COLABORATIVO 301125_16

TUTOR
MARIANO ESTEBAN ROMERO

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA (UNAD).


ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERA
INGENIERÍA DE SISTEMAS
CEAD PALMIRA,
2019
TABLA DE CONTENIDO

INTRODUCCIÓN .............................................................................................................................. 3
FASE 1: MODELAMIENTO ............................................................................................................. 4
FORMATOS DILIGENCIADOS DE ACUERDO ETAPA DE ANÁLISIS ..................................... 4
DISEÑO MODELO RELACIONAL ................................................................................................ 13
DESARROLLO DE LA BASE DE DATOS RELACIONAL.......................................................... 14
PROGRAMACIÓN CON EL LENGUAJE SQL DEL SCRIPT DDL ............................................. 14
PROGRAMACIÓN CON EL LENGUAJE SQL DEL SCRIPT DML (INSERT INTO) ................ 17
PROGRAMACIÓN CON EL LENGUAJE SQL SCRIPTS DCL (PERMISOS A OBJETOS) ...... 23
CONSULTAS SIMPLES SOBRE LAS TABLAS DE LA BASE DE DATOS ............................... 24
FASE 2: IMPLEMENTACIÓN ........................................................................................................ 26

SCRIPT DE LAS CONSULTAS AVANZADAS CON JOINS. .............................................. 26

SCRIPT DE LAS CONSULTAS AVANZADAS CON FUNCIONES AGREGADAS. ......... 30

SCRIPT CON CINCO PROCEDIMIENTOS ALMACENADOS............................................ 33

SCRIPT CON CINCO DISPARADORES O TRIGGERS. ...................................................... 37
FASE 3: ADMINISTRACIÓN ......................................................................................................... 39
a. CREAR Y GESTIONAR ESTRUCTURAS DE ALMACENAMIENTO ................................................... 39
B. CREAR Y GESTIONAR USUARIOS: .................................................................................................. 41
C. GESTIONAR ESQUEMAS Y OBJETOS .............................................................................................. 48
CONCLUSIONES ................................................................................................................................. 54
BIBLIOGRAFÍA ............................................................................................................................... 55
INTRODUCCIÓN

En el presente trabajo se abordaran temas relacionados con las diferentes fases para la
gestión de una base de datos, en la Fase1 Modelamiento, en esta fase se realiza el proceso
de diseño de bases de datos relacionales, partiendo inicialmente con el Análisis o modelado
entidad relación o modelado conceptual, el diseño o modelado relacional o diseño
lógico/físico y el desarrollo – implementación o diseño físico, diligenciando diferentes
formatos que contribuirán con el desarrollo del modelo entidad relación del problema
propuesto, de igual manera, se compartirán scripts SQL relacionados con la creación de
tablas, inserción de registros y asignación de privilegios (DDL,DML y DCL), también se
compartirán scripts de consultas realizadas sobre los registros realizados en las tablas de la
base de datos.

En la Fase 2. Implementación, trabajo se desarrollaran temas relacionados con las consultas


con joins, (left, rigth, innner, cross, natural, full), que nos sirve para traer datos de
diferentes tablas, de acuerdo a lo que se desee traer como resultados en las consultas, de
igual manera, el uso de funciones para contar, sumar, hallar el promedio, valor máximo y
mínimo de los campos de los registros. Se muestran la creación y funcionamiento de
diferentes procedimientos y disparadores, mediante el uso de varios casos prácticos.

En el presente trabajo vamos a desarrollar el Manejo de Joins, Campos calculados con


funciones, Procedimientos almacenados y disparadores también vamos a realizar consulta
por cada join como nos expuso la misma guía de la actividad para un mejor aprendizaje,
luego haremos una consulta avanzada por medio de SQL como lo vamos a ver a
continuación en su desarrollo.

En la Fase 3. Administración, se implementa la seguridad de la base de datos por medio del


lenguaje de definición de datos creando usuarios y privilegios, abordando temáticas
referentes a las Estructuras de Almacenamiento, Administración de Usuarios y Gestión de
esquemas y objetos.
En el siguiente trabajo vamos a ver cómo nos enseña el curso desde el inicio de la unidad la
seguridad de la base de datos por medio del lenguaje de definición de datos creando
usuarios y privilegios porque nos ayuda a crear más seguridad en los datos y la forma de
almacenamiento limitado de información a los usuarios seleccionados agregando una
importancia confidencial de los datos prioritarios
FASE 1: MODELAMIENTO

FORMATOS DILIGENCIADOS DE ACUERDO ETAPA DE ANÁLISIS

Formato 1 – Descripción de Entidades


Entidad o Tipo Justificación, Ejemplo de Ejemplares Extensión INTENCION
de Entidad explicación de (Instancias)
su existencia
en el Mundo
del Problema
Asignatura Es importante  Bases de datos 200 Hacer parte de
porque es  Ingles nivel 1 un plan de
mediante la  Autómatas estudios
cual se van a  Cálculo Diferencial
matricular los  Física II
diferentes  Epistemología
estudiantes  Proyecto de Grado

Oferta Es importante  Ingeniería en sistemas 20 Publicar las


Académica ya que en ella  Contaduría publica diferentes
se muestra los  Ingeniería industrial programas
diferentes  Diseño gráfico disponibles para
programas que  Ingeniería de alimentos cursar
se ofrecen para
que los
estudiantes se
matriculen
Estudiantes Es importante  Juan Camilo Rengifo 1.000 Matricular y
ya que es el  Carlos Andrés Arenas Cursar las
pilar  Yadir Fabian Bejarano diferentes
fundamental, la  Luis Hernando materias o
razón de ser de Salamanca asignaturas
una universidad  Jeisson Lenis

Matricula Es importante  Juan Camilo Rengifo 10.000 Almacenar las


porque Bases de datos diferentes
contiene los 4.5 materias
estudiantes  Juan Camilo Rengifo matriculadas por
registrados en Autómatas los estudiantes y
cada asignatura 5.0 guardar las
y las notas de notas obtenidas
los mismos
Tutor Es importante  Mariano Esteban 100 Impartir las
ya que Romero diferentes
contiene los  Holmes augusto García asignaturas y
datos de la  Oscar Mauricio mora calificar los
persona arroyo trabajos de los
encargada de estudiantes
impartir las
materias
Es importante  Prerrequisito 90006 50 Almacenar las
Prerrequisito ya que contiene  Prerrequisito 90030 diferentes
información de  Prerrequisito 90013 materias que
las materias son requisitos
que son para otras
requisitos para
poder cursar
otra
Programa Es importante  Ingenieria en sistemas 50 Almacenar los
ya que contiene  Ingenieria industrial diferentes
el nombre de la  Ingenieria de alimentos nombres de las
carrera o  Administración de carreras o
programa de empresas programas
formación

Aulas Es importante  Aula 01 norte 100 Almacenar la


ya que contiene  Aula 02 norte información de
información de las diferentes
los lugares aulas
disponibles disponibles para
para realizar la la formación
formación de
los estudiantes
Horarios Es importante  Sábados de 8:00 am a 100 Almacenar
ya que contiene 12: m información
las fechas y  Lunes a viernes 8:00 am perteneciente a
horas en los a 10: 00 am horas y fechas
cuales se va a para impartir la
impartir la formación
formación
Formato 2 - Descripción de atributos y sus restricciones naturales (Tipo de Dato) y restricciones adicionales Dominios (Lista de Valores, Rangos
de Valores y Restricciones generales) - VERSION 1

Nombre Entidad Atributos Identificador Nombre dominio Tipo de Tamaño Obligatoriedad Cardinalidad Restricciones adicionales
Único (UID) Dato (Si/No) (1 o
(Texto, Muchos) Lista de Rango de Restricción de
Número, Valores Valores Control
Fecha)
Asignatura Asignatura_id X Asignaturas _ids N 6 Si 1 -- -- --
Titulo Titulos T 100 Si -- -- --
Prerrequisito_id Prerrequisitos_ids N 6 No -- -- --
Programa_id Programas_ids N 10 Si -- -- --
Programa Programa_id x Programas_ids N 10 Si -- -- --
Nombre Nombres T 250 Si -- -- --
Prerrequisito Prerrequisito_id x Prerrequisitos_ids N 6 Si 1
Descripcion Descripciones T 100 Si
Oferta Oferta_id x Ofertas_ids N 5 Si 1 -- -- --
Académica Numero_asignatura Número_asignaturas N 2 Si -- -- --
Año año N 4 Si -- -- --
Semestre Semestres N 2 Si -- -- --
Numero_seccion Número_secciones N 2 No -- -- --
Estudiante Estudiante_id x Estudiantes_ids N 12 Si 1 -- -- --
Nombre Nombres T 100 Si -- -- --
Apellido Apellidos T 100 No
Genero Generos T 1 Si 1 M,F,X
Departamento Departamentos T 100 No -- -- --
Titulo Titulos T 100 No -- -- --
Matricula Matricula_id x Matriculas_ids N 12 Si 1 -- -- --
Estudiante_id Estudiantes_ids N 12 Si -- -- --
Oferta_id Ofertas_ids N 5 Si -- -- --
Nota Notas N 1,2 Si -- -- --
Tutor Tutor_id x Tutores_ids N 12 Si 1 -- -- --
Nombre Nombres T 100 Si -- -- --
Apellido Apellidos T 100 No
Genero Generos T 1 Si 1 M,F,X
Titulo Titulos T 100 Si -- -- --
Aula Aula_id x Aulas_ids T 5 Si 1 -- -- --
Nombre Nombres T 50 Si -- -- --
Descripcion Descripciones T 200 No -- -- --
Horario Horario_id x Horarios_ids T 5 Si 1 -- -- --
Descripcion Descripciones T 100 No -- -- --
Hora_inicial Horas_iniciales F 8 Si -- -- --
Hora_final Horas_finales F 8 Si -- -- --
Oferta_ Oferta_tutor_id x Ofertas_tutores_ids N 5 Si 1 -- -- --
Oferta_id Ofertas_ids N 5 Si -- -- --
tutor Tutor_id Tutores_ids N 12 Si -- -- --
Aula_id Aulas_ids T 5 Si -- -- --
Horario_id Horarios_ids T 5 Si -- -- --
Formato 3: Matriz de Relaciones

Asignatura Programa Prerrequisito Oferta acad. Estudiante Tutor Aula Horario Matricula Oferta_tutor
Asignatura R1 R9 R8
Programa
Prerrequisito
Oferta académica R7 R3
Estudiante R6
Tutor R2
Aula R5
Horario R4
Matricula
Oferta_tutor
Formato 4 – Descripción ampliada de las relaciones determinadas en la Matriz de Relaciones (Análisis de
Roles, Cardinalidad/Opcionalidad, Grado, Cualidad de identificación, Transferibilidad
Relación Entidad 1 Rol Entidad 2 Pregunta para Rta Pregunta para Rta Relación es Grado Ayuda a Observación/
determinar Opcional determinar card. transferible identificar restricciones/atributos
opcionalidad cardinalidad entidades
participantes
Asignatura Contiene Programa ¿Asignatura Si ¿Una M Si 1:M Las En esta relación modela un
R1 está obligado asignatura entidades hecho importante que sucede
a tener CUANTOS participantes en el proceso que estamos
programa? programas se analizando y es que
tiene? identifican asignatura está obligado a
plenamente. tener programa. Es posible
que algún programa tengan
asignatura
Programa Tiene Asignatura ¿Programa Si ¿Un M Si 1:M Las En esta relación modela un
está obligado programa entidades hecho importante que sucede
a tener una CUANTAS participantes en el proceso que estamos
asignatura? asignaturas se analizando y es que programa
tiene? identifican está obligado a tener
plenamente. asignatura. Es posible que
alguna asignatura tenga
programa.
Asignatura Contiene Prerrequisito ¿Asignatura No ¿Una 1 Si 1:1 Las En esta relación modela un
R9 está obligado asignatura entidades hecho importante que sucede
a tener CUANTOS participantes en el proceso que estamos
prerrequisito? prerrequisitos se analizando y es que
tiene? identifican asignatura está obligado a
plenamente. tener prerrequisito. Es posible
que algún prerrequisito tenga
asignatura.
Prerrequisito Tiene Asignatura ¿Prerrequisito Si ¿Un M Si 1:M Las En esta relación modela un
está obligado prerrequisito entidades hecho importante que sucede
tener una CUANTAS participantes en el proceso que estamos
asignatura? asignaturas se analizando y es que
tiene? identifican prerrequisito está obligado a
plenamente. tener asignatura. Es posible
que alguna asignatura tenga
prerrequisito.
Asignatura Contiene Oferta ¿Asignatura Si ¿Una 1 Si 1:1 Las En esta relación modela un
R8 académica está obligado asignatura entidades hecho importante que sucede
a tener una CUANTAS participantes en el proceso que estamos
oferta ofertas se analizando y es que
académica? académicas identifican asignatura está obligado a
tiene? plenamente. tener oferta académica. Es
posible que oferta académica
tenga asignatura.
Oferta Tiene Asignatura ¿Oferta Si ¿Una oferta M Si 1:M Las En esta relación modela un
académica académica académica entidades hecho importante que sucede
está obligado CUANTAS participantes en el proceso que estamos
a tener una asignaturas se analizando y es que oferta
asignatura? tiene? identifican académica está obligado a
plenamente. tener asignatura. Es posible
que alguna asignatura tenga
oferta académica.
Oferta Contiene Matricula ¿Oferta No ¿Una oferta M Si 1:M Las En esta relación modela un
R7 académica académica académica entidades hecho importante que sucede
está obligado CUANTAS participantes en el proceso que estamos
a tener matriculas se analizando y es que oferta
matricula? tiene? identifican académica está obligado a
plenamente. tener matricula. Es posible
que alguna matricula tenga
oferta académica.
Matricula Tiene Oferta ¿Matricula Si ¿Una 1 Si 1:1 Las En esta relación modela un
académica está obligado matrícula entidades hecho importante que sucede
a tener oferta CUANTAS participantes en el proceso que estamos
académica? oferta se analizando y es que matricula
académica identifican está obligado a tener oferta
tiene? plenamente. académica. Es posible que
alguna oferta académica
tenga matricula.
R6 Estudiante Contiene Matricula ¿Estudiante Si ¿Un 1 Si 1:1 Las En esta relación modela un
está obligado estudiante entidades hecho importante que sucede
a tener CUANTAS participantes en el proceso que estamos
matricula? matriculas se analizando y es que
tiene identifican estudiante está obligado a
plenamente. tener matricula. Es posible
que alguna matricula tenga
estudiante.
Matricula Tiene Estudiante ¿Matricula Si ¿Una M Si 1:M Las En esta relación modela un
está obligado matrícula entidades hecho importante que sucede
a tener CUANTOS participantes en el proceso que estamos
estudiante? estudiante se analizando y es que matricula
tiene? identifican está obligado a tener
plenamente. estudiante. Es posible que
algún estudiante tenga
matricula.
Oferta Contiene Oferta_tutor ¿Oferta Si ¿Una oferta M Si 1:M En esta relación modela un
R3 académica académica académica hecho importante que sucede
está obligado CUANTAS en el proceso que estamos
a tener oferta_tutor analizando y es que oferta
oferta_tutor? tiene? académica está obligado a
tener oferta_tutor. Es posible
que alguna oferta_tutor
tenga oferta académica.
Oferta_tutor Tiene Oferta ¿Oferta_tutor Si ¿Una M Si 1:M Las En esta relación modela un
académica está obligado oferta_tutor entidades hecho importante que sucede
a tener oferta CUANTAS participantes en el proceso que estamos
académica? oferta se analizando y es que
académica identifican oferta_turo está obligado a
tiene? plenamente. tener oferta académica. Es
posible que alguna oferta
académica tenga
oferta_tutor.
R2 Tutor Contiene Oferta_tutor ¿Tutor está No ¿Un tutor 1 Si 1:1 Las En esta relación modela un
obligado a CUANTAS entidades hecho importante que sucede
tener oferta_tutor participantes en el proceso que estamos
oferta_tutor? tiene? se analizando y es que tutor está
identifican obligado a tener oferta_tutor.
plenamente. Es posible que alguna
oferta_tutor tenga tutor.
Oferta_tutor Tiene Tutor ¿Oferta_tutor Si ¿Una M Si 1:M| Las En esta relación modela un
está obligado oferta_tutor entidades hecho importante que sucede
a tener CUANTOS participantes en el proceso que estamos
Tutor? tutor tiene? se analizando y es que
identifican oferta_tutor está obligado a
plenamente. tener tutor. Es posible que
algún tutor tenga
oferta_tutor.
R5 Aula Contiene Oferta_tutor ¿Aula está Si ¿Un aula M Si 1:M Las En esta relación modela un
obligado a CUANTAS entidades hecho importante que sucede
tener oferta_tutor participantes en el proceso que estamos
oferta_tutor? tiene? se analizando y es que aula está
identifican obligado a tener oferta_tutor.
plenamente. Es posible que alguna
oferta_tutor tenga aula.
Oferta_tutor Tiene Aula ¿Oferta_tutor Si ¿Una M Si M:M Las En esta relación modela un
está obligado oferta_tutor entidades hecho importante que sucede
a tener aula? CUANTAS participantes en el proceso que estamos
Aula tiene? se analizando y es que
identifican oferta_tutor está obligado a
plenamente. tener aula. Es posible que
alguna aula tenga
oferta_tutor.
R4 Horario Contiene Oferta_tutor ¿Horario está Si ¿Un horario 1 Si 1:1 Las En esta relación modela un
obligado a CUANTAS entidades hecho importante que sucede
tener oferta_tutor participantes en el proceso que estamos
oferta_tutor? tiene? se analizando y es que horario
identifican está obligado a tener
plenamente. oferta_tutor. Es posible que
alguna oferta_tutor tenga
horario.
Oferta_tutor Tiene Horario ¿Oferta_tutor Si ¿Una |M Si 1:M Las En esta relación modela un
está obligado oferta_tutor entidades hecho importante que sucede
a tener CUANTOS participantes en el proceso que estamos
horario? horarios se analizando y es que
tienes? identifican oferta_tutor está obligado a
plenamente. tener horario. Es posible que
algún horario tenga
oferta_tutor.
DISEÑO MODELO RELACIONAL
DESARROLLO DE LA BASE DE DATOS RELACIONAL.

PROGRAMACIÓN CON EL LENGUAJE SQL DEL SCRIPT DDL

CREATE TABLE Programa


( programa_id number(10) NOT NULL,
nombre varchar2(250) NOT NULL,
CONSTRAINT programa_pk PRIMARY KEY (programa_id)
);

CREATE TABLE Aula


( aula_id varchar2(5) NOT NULL,
nombre varchar2(50) NOT NULL,
descripcion varchar2(200),
CONSTRAINT aula_pk PRIMARY KEY (aula_id)
);

CREATE TABLE Prerrequisito


( prerrequisito_id number(6) NOT NULL,
descripcion varchar2(100) NOT NULL,
CONSTRAINT prerrequisito_pk PRIMARY KEY (prerrequisito_id)
);

CREATE TABLE Tutor


( tutor_id number(12) NOT NULL,
nombre varchar2(100) NOT NULL,
apellido varchar2(100) NULL,
genero varchar2(1) NOT NULL,
titulo varchar2(100) NOT NULL,
CONSTRAINT tutor_pk PRIMARY KEY (tutor_id)
);

CREATE TABLE Estudiantes


( estudiante_id number(12) NOT NULL,
nombre varchar2(100) NOT NULL,
apellido varchar2(100) NULL,
genero varchar2(1) NOT NULL,
titulo varchar2(100) NULL,
departamento varchar2(100) NULL,
CONSTRAINT estudiante_pk PRIMARY KEY (estudiante_id)
);
CREATE TABLE Asignatura
( asignatura_id number(6) NOT NULL,
titulo varchar2(100) NOT NULL,
prerrequisito_id number(6) NULL,
programa_id number(10) NOT NULL,
CONSTRAINT asignatura_pk PRIMARY KEY (asignatura_id),
CONSTRAINT fk_asignatura_prerrequisito FOREIGN KEY (prerrequisito_id)
REFERENCES prerrequisito(prerrequisito_id),
CONSTRAINT fk_asignatura_programa FOREIGN KEY (programa_id) REFERENCES
programa(programa_id)
);

CREATE TABLE Oferta_academica


( oferta_id number(5) NOT NULL,
num_asignatura number(2) NOT NULL,
ano number(4) NOT NULL,
semestre number(2) NOT NULL,
num_seccion number(2) NULL,
asignatura_id number(6) NOT NULL,
CONSTRAINT oferta_pk PRIMARY KEY (oferta_id),
CONSTRAINT fk_oferta_asignaturaFOREIGN KEY (asignatura_id) REFERENCES
asignatura(asignatura_id)
);

CREATE TABLE Matricula (


matricula_id number(12) NOT NULL,
estudiante_id number(12) NOT NULL,
oferta_id number(5) NOT NULL,
nota numeric(1,2) NOT NULL,
CONSTRAINT matricula_pk PRIMARY KEY (matricula_id),
CONSTRAINT fk_matricula_estudiante FOREIGN KEY (estudiante_id) REFERENCES
estudiantes(estudiante_id),
CONSTRAINT fk_matricula_oferta FOREIGN KEY (oferta_id) REFERENCES
oferta_academica(oferta_id)
);

CREATE TABLE Oferta_tutor (


oferta_tutor_id number(5) NOT NULL,
tutor_id number(12) NOT NULL,
oferta_id number(5) NOT NULL,
aula_id varchar2(5) NOT NULL,
horario_id varchar2(5) NOT NULL,
CONSTRAINT Oferta_tutor_pk PRIMARY KEY (oferta_tutor_id),
CONSTRAINT fk_Oferta_tutor_estudiante FOREIGN KEY (tutor_id) REFERENCES tutor(tutor_id),
CONSTRAINT fk_Oferta_tutor_oferta FOREIGN KEY (oferta_id) REFERENCES
oferta_academica(oferta_id),
CONSTRAINT fk_Oferta_tutor_aula FOREIGN KEY (aula_id) REFERENCES aula(aula_id),
CONSTRAINT fk_Oferta_tutor_horario FOREIGN KEY (horario_id) REFERENCES
horario(horario_id)
);

CREATE TABLE Horario (


horario_id varchar(5) NOT NULL,
descripcion varchar2(100) NULL,
hora_inicial time NULL,
hora_final time NULL,
CONSTRAINT horario_pk PRIMARY KEY (horario_id)
);
PROGRAMACIÓN CON EL LENGUAJE SQL DEL SCRIPT DML (INSERT INTO)

1. INSERT TABLA AULA


INSERT INTO AULA (aula_id, nombre, descripcion) VALUES (1, 'Aula 101', 'Aula definida
para laboratorios');
INSERT INTO AULA (aula_id, nombre, descripcion) VALUES (2, 'Aula 102', 'Aula definida para el
area de ingles');
INSERT INTO AULA (aula_id, nombre, descripcion) VALUES (3, 'Aula 103', 'Aula para practicas de
física');
INSERT INTO AULA (aula_id, nombre, descripcion) VALUES (4, 'Aula 104', 'Aula para clases
de cálculo');
INSERT INTO AULA (aula_id, nombre, descripcion) VALUES (5, 'Aula 105', 'Aula para laboratorio de
informática');

2. INSERT TABLA HORARIO


INSERT INTO Horario(horario_id,descripcion,hora_inicial,hora_final) values ('01','Horario 10-
12',TO_DATE('2019-02-01 10:00:00' ,'YYYY-MM-DD HH24:MI:SS') ,TO_DATE('2019-02-01 12:00:00'
, 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO Horario(horario_id,descripcion,hora_inicial,hora_final) values ('02','Horario 8-
10',TO_DATE('2019-02-01 08:00:00' ,'YYYY-MM-DD HH24:MI:SS') ,TO_DATE('2019-02-01 10:00:00'
, 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO Horario(horario_id,descripcion,hora_inicial,hora_final) values ('03','Horario 14-
16',TO_DATE('2019-02-01 14:00:00' ,'YYYY-MM-DD HH24:MI:SS') ,TO_DATE('2019-02-01 16:00:00'
, 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO Horario(horario_id,descripcion,hora_inicial,hora_final) values ('04','Horario 16-
18',TO_DATE('2019-02-01 16:00:00' ,'YYYY-MM-DD HH24:MI:SS') ,TO_DATE('2019-02-01 18:00:00'
, 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO Horario(horario_id,descripcion,hora_inicial,hora_final) values ('05','Horario 18-
20',TO_DATE('2019-02-01 18:00:00' ,'YYYY-MM-DD HH24:MI:SS') ,TO_DATE('2019-02-01 20:00:00'
, 'YYYY-MM-DD HH24:MI:SS'));

3. INSERT TABLA PROGRAMA

INSERT INTO Programa (PROGRAMA_ID, NOMBRE) values (1022, 'Ingenieria en sistemas');


INSERT INTO Programa (PROGRAMA_ID, NOMBRE) values (1023, 'Ingenieria de alimentos');
INSERT INTO Programa (PROGRAMA_ID, NOMBRE) values (1024, 'Ingenieria civil'); INSERT
INTO Programa (PROGRAMA_ID, NOMBRE) values (1021, 'Licenciatura en lenguas
extranjeras');
INSERT INTO Programa (PROGRAMA_ID, NOMBRE) values (1025, 'Administración de empresas');
4. INSERT TABLA PRERREQUISITO
INSERT INTO Prerrequisito (PRERREQUISITO_ID,DESCRIPCION) values
(90006,'Prerrequisito 90006');
INSERT INTO Prerrequisito (PRERREQUISITO_ID,DESCRIPCION) values
(90030,'Prerrequisito 90030');
INSERT INTO Prerrequisito (PRERREQUISITO_ID,DESCRIPCION) values
(90013,'Prerrequisito 90013');
INSERT INTO Prerrequisito (PRERREQUISITO_ID,DESCRIPCION) values
(10010,'Prerrequisito 10010');
INSERT INTO Prerrequisito (PRERREQUISITO_ID,DESCRIPCION) values
(30131,'Prerrequisito 30131');

5. INSERT TABLA ASIGNATURA


INSERT INTO Asignatura(ASIGNATURA_ID,TITULO,PRERREQUISITO_ID,PROGRAMA_ID) values
(15014,'Lógica Matemática',30131,1024);
INSERT INTO Asignatura(ASIGNATURA_ID,TITULO,PRERREQUISITO_ID,PROGRAMA_ID) values
(98123,'Calculo diferencial',10010,1024);
INSERT INTO Asignatura(ASIGNATURA_ID,TITULO,PRERREQUISITO_ID,PROGRAMA_ID) values
(90253,'Catedra Unadista',90013,1025);
INSERT INTO Asignatura(ASIGNATURA_ID,TITULO,PRERREQUISITO_ID,PROGRAMA_ID) values
(90015,'Ingles Nivel 2', 90006, 1021);
INSERT INTO Asignatura(ASIGNATURA_ID,TITULO,PRERREQUISITO_ID,PROGRAMA_ID) values
(90013,'Introduccion a Ingeniera de sistemas',90006,1022);
6. INSERT TABLA TUTOR

INSERT INTO Tutor (TUTOR_ID,NOMBRE,APELLIDO,GENERO,TITULO) values (112055555, 'Juan


Camilo', 'Rengifo', 'M', 'Ingeniero en Alimentos');
INSERT INTO Tutor (TUTOR_ID,NOMBRE,APELLIDO,GENERO,TITULO) values
(167775555, 'Mariano', 'Romero', 'M', 'Ingeniero en sistemas');
INSERT INTO Tutor (TUTOR_ID,NOMBRE,APELLIDO,GENERO,TITULO) values (120555333, 'Carlos
Antonio', 'Rengifo', 'M', 'Licenciado en Lenguas');
INSERT INTO Tutor (TUTOR_ID,NOMBRE,APELLIDO,GENERO,TITULO) values (108555255, 'Andres
Felipe', 'Renteria', 'M', 'Ingeniero Civil');
INSERT INTO Tutor (TUTOR_ID,NOMBRE,APELLIDO,GENERO,TITULO) values (178905674, Laura
sofia', 'Tarifa', 'F', 'Ingeniero en sistemas');
7. INSERT TABLA ESTUDIANTES
INSERT INTO Estudiantes (ESTUDIANTE_ID,NOMBRE,APELLIDO,GENERO,TITULO,DEPARTAMENTO)
values (1, 'RADAMEL FALCO', 'GARCIA', 'M', 'TECNOLOGO ADSI');
INSERT INTO Estudiantes (ESTUDIANTE_ID,NOMBRE,APELLIDO,GENERO,TITULO,DEPARTAMENTO)
values (2, 'ALFREDO', 'PEREIRA', 'M', 'TECNICO EN REDES');
INSERT INTO Estudiantes (ESTUDIANTE_ID,NOMBRE,APELLIDO,GENERO,TITULO,DEPARTAMENTO)
values (3, 'JEFFERSON AUGUSTO', 'LERMA', 'M', 'TECNOLOGO EN COMUNICACIONES');
INSERT INTO Estudiantes (ESTUDIANTE_ID,NOMBRE,APELLIDO,GENERO,TITULO,DEPARTAMENTO)
values (4, 'RADAMEL AUGUSTO', 'LOPEZ', 'M', 'TECNICO EN REDES');
INSERT INTO Estudiantes (ESTUDIANTE_ID,NOMBRE,APELLIDO,GENERO,TITULO,DEPARTAMENTO)
values (5, 'JAIR', 'PALACIOS', 'M', 'TECNICO HELP DESK');

8. INSERT TABLA OFERTA_ACADEMICA


INSERT INTO
Oferta_academica(OFERTA_ID,NUM_ASIGNATURA,ANO,SEMESTRE,NUM_SECCION,ASIGNATURA_I
D) values (1,2,2019,1,14,90013);
INSERT INTO
Oferta_academica(OFERTA_ID,NUM_ASIGNATURA,ANO,SEMESTRE,NUM_SECCION,ASIGNATURA_I
D) values (2,2,2019,1,14,90015);
INSERT INTO
Oferta_academica(OFERTA_ID,NUM_ASIGNATURA,ANO,SEMESTRE,NUM_SECCION,ASIGNATURA_I
D) values (3,3,2019,1,14,90253);
INSERT INTO
Oferta_academica(OFERTA_ID,NUM_ASIGNATURA,ANO,SEMESTRE,NUM_SECCION,ASIGNATURA_I
D) values (4,2,2019,1,14,98123);
INSERT INTO
Oferta_academica(OFERTA_ID,NUM_ASIGNATURA,ANO,SEMESTRE,NUM_SECCION,ASIGNATURA_I
D) values (5,3,2019,2,14,15014);
9. INSERT TABLA MATRICULA

INSERT INTO Matricula (MATRICULA_ID,ESTUDIANTE_ID,OFERTA_ID,NOTA) values (1, 1, 1,4.5);


INSERT INTO Matricula (MATRICULA_ID,ESTUDIANTE_ID,OFERTA_ID,NOTA) values (2, 1, 1,4.0);
INSERT INTO Matricula (MATRICULA_ID,ESTUDIANTE_ID,OFERTA_ID,NOTA) values (3, 2, 2,3.0);
INSERT INTO Matricula (MATRICULA_ID,ESTUDIANTE_ID,OFERTA_ID,NOTA) values (4, 3, 3,3.0);
INSERT INTO Matricula (MATRICULA_ID,ESTUDIANTE_ID,OFERTA_ID,NOTA) values (5, 4, 2,2.0);

10. INSERT TABLA OFERTA_TUTOR


INSERT INTO Oferta_tutor (OFERTA_TUTOR_ID,TUTOR_ID,OFERTA_ID,AULA_ID,HORARIO_ID)
values (1,112055555,1,1,'01');
INSERT INTO Oferta_tutor (OFERTA_TUTOR_ID,TUTOR_ID,OFERTA_ID,AULA_ID,HORARIO_ID)
values (2,167775555,2,2,'02');
INSERT INTO Oferta_tutor (OFERTA_TUTOR_ID,TUTOR_ID,OFERTA_ID,AULA_ID,HORARIO_ID)
values (3,120555333,3,3,'03');
INSERT INTO Oferta_tutor (OFERTA_TUTOR_ID,TUTOR_ID,OFERTA_ID,AULA_ID,HORARIO_ID)
values (4,108555255,4,4,'04');
INSERT INTO Oferta_tutor (OFERTA_TUTOR_ID,TUTOR_ID,OFERTA_ID,AULA_ID,HORARIO_ID)
values (5,178905674,5,5,'05');
PROGRAMACIÓN CON EL LENGUAJE SQL SCRIPTS DCL (PERMISOS A
OBJETOS)

GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Programa TO CONSULTOR;


GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Prerrequisito TO
CONSULTOR; GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Asignatura TO
CONSULTOR; GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Estudiantes TO
CONSULTOR; GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Tutor TO
CONSULTOR; GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Aula TO
CONSULTOR; GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Horario TO
CONSULTOR; GRANT SELECT, INSERT, UPDATE, DELETE ON
UNADBASEDEDATO.Oferta_academica TO CONSULTOR;
GRANT SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Matricula TO CONSULTOR; GRANT
SELECT, INSERT, UPDATE, DELETE ON UNADBASEDEDATO.Oferta_tutor TO CONSULTOR;
CONSULTAS SIMPLES SOBRE LAS TABLAS DE LA BASE DE DATOS

1.) select * from Estudiantes where departamento = 'VALLE DEL CAUCA'

La consulta trae todos los registros de los estudiantes cuyo departamento sea VALLE DEL CAUCA

2) select asg.asignatura_id, asg.titulo, asg.prerrequisito_id, asg.programa_id, pr.nombre


from asignatura asg left join programa pr on asg.programa_id = pr.programa_id where
asg.programa_id = '1024'

Trae las asignaturas que pertenecen al programa “1024”, es decir ingeniería civil

3) select * from estudiantes where nombre like ‘RADAMEL%’;

Consulta por similitudes en nombre, retorna dos estudiantes que contenga el mismo nombre
4) select * from tutor where genero = 'F'
Trae todos los tutores cuyo género sea Femenino

5) select mt.MATRICULA_ID,mt.ESTUDIANTE_ID,mt.OFERTA_ID,mt.NOTA, est.NOMBRE,


est.APELLIDO, ofc.ASIGNATURA_ID, asg.TITULO from Matricula mt left join Estudiantes est
on mt.ESTUDIANTE_ID = est.ESTUDIANTE_ID left join Oferta_academica ofc on
mt.OFERTA_ID = ofc.OFERTA_ID left join Asignatura asg on ofc.ASIGNATURA_ID =
asg.ASIGNATURA_ID where mt.NOTA >= 3 order by apellido asc

La consulta trae los datos de la matrícula, el nombre y apellido del estudiante, y el


nombre de la asignatura, de los estudiantes cuya nota sea mayor o igual a 3, los datos son
traídos ordenados por el apellido del estudiante
FASE 2: IMPLEMENTACIÓN

 
SCRIPT DE LAS CONSULTAS AVANZADAS CON JOINS.

- INNER JOIN

SELECT a.ASIGNATURA_ID, a.TITULO, a.PROGRAMA_ID, p.NOMBRE


FROM ASIGNATURA a
INNER JOIN PROGRAMA p ON a.PROGRAMA_ID =
p.PROGRAMA_ID ORDER BY a.TITULO ASC

Trae todas las asignaturas cuyo atributo programa_id, se encuentre en la tabla


programa y sea el mismo que la llave primaria, programa_id, es decir, que
estén presentes en ambas tablas, y ordena los resultados por el título de la
asignatura de manera ascendente

- LEFT JOIN

SELECT MT.ESTUDIANTE_ID, EST.APELLIDO, EST.NOMBRE, OFC.ASIGNATURA_ID, ASG.TITULO,


MT.NOTA
FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON MT.ESTUDIANTE_ID = EST.ESTUDIANTE_ID
LEFT JOIN OFERTA_ACADEMICA OFC ON MT.OFERTA_ID = OFC.OFERTA_ID
LEFT JOIN ASIGNATURA ASG ON OFC.ASIGNATURA_ID = ASG.ASIGNATURA_ID
ORDER BY EST.APELLIDO ASC
Trae los datos de la matricula, estudiantes y asignaturas, mostrando el id del estudiante,
apellido, nombre, id de asignatura, el titulo de la asignatura matriculada y la nota sacada, y se
ordena ascendente por el apellido del estudiante.

- RIGHT JOIN

SELECT ASI.ASIGNATURA_ID, ASI.TITULO, ASI.PROGRAMA_ID,


PR.NOMBRE
FROM ASIGNATURA ASI
RIGHT JOIN PROGRAMA PR ON ASI.PROGRAMA_ID = PR.PROGRAMA_ID
WHERE ASI.ASIGNATURA_ID IS NULL

Trae los diferentes programas que no tienen asignados ninguna asignatura


- CROSS JOIN

SELECT a.AULA_ID, a.NOMBRE, h.HORARIO_ID, h.DESCRIPCION


FROM aula a
CROSS JOIN horario h
ORDER BY a.AULA_ID, a.NOMBRE, h.HORARIO_ID, h.DESCRIPCION

Realiza todas las combinaciones posibles de la tabla de aula y horario.

- NATURAL JOIN

SELECT ASI.TITULO, PR.NOMBRE


FROM ASIGNATURA ASI
NATURAL JOIN PROGRAMA PR
ORDER BY PR.NOMBRE

Muestra el nombre del programa y el título de la asignatura uniendo ambas


tablas mediante el natural join no es necesario unir los id de la tabla con la
llave foránea, sino que lo hace implícitamente
- JOIN USING

SELECT ASI.TITULO, PR.NOMBRE


FROM ASIGNATURA ASI
JOIN PROGRAMA PR USING (PROGRAMA_ID)
ORDER BY PR.NOMBRE

Muestra el nombre del programa y el título de la asignatura al igual que el


natural join anterior, solo que para esta es necesario especificar la llave
mediante el cual se relacionan.

- FULL JOIN

SELECT MT.ESTUDIANTE_ID, EST.APELLIDO, EST.NOMBRE,


OFC.ASIGNATURA_ID, ASG.TITULO, MT.NOTA FROM MATRICULA MT

FULL JOIN ESTUDIANTES EST ON MT.ESTUDIANTE_ID =


EST.ESTUDIANTE_ID
FULL JOIN OFERTA_ACADEMICA OFC ON MT.OFERTA_ID =
OFC.OFERTA_ID
FULL JOIN ASIGNATURA ASG ON OFC.ASIGNATURA_ID =
ASG.ASIGNATURA_ID
ORDER BY EST.APELLIDO ASC
Trae todas las combinaciones realizadas en el join, aun sin estar presentes en
la relación, en este caso vemos que el estudiante Hair no se encuentra en
ninguna matricula pero aun así se ve en el resultado de la consulta, debido a
que si hizo un full join a la tabla de estudiantes.


CONSULTAS AVANZADAS CON FUNCIONES
SCRIPT DE LAS
AGREGADAS.

- COUNT

SELECT count(*) as cantidad,


a.PROGRAMA_ID,p.NOMBRE FROM ASIGNATURA a
INNER JOIN PROGRAMA p ON a.PROGRAMA_ID =
p.PROGRAMA_ID WHERE p.NOMBRE like '%Ingenieria%'
GROUP BY a.PROGRAMA_ID, p.NOMBRE
ORDER BY p.NOMBRE ASC
Cuenta la cantidad de Asignaturas que pertenecen a los programas cuyo nombre contenga la
palabra “Ingenieria”, y lo ordena por el nombre del programa de manera ascendente

- AVG

SELECT AVG(MT.NOTA) AS PROMEDIO, MT.ESTUDIANTE_ID,


EST.NOMBRE, EST.APELLIDO
FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON MT.ESTUDIANTE_ID =
EST.ESTUDIANTE_ID
GROUP BY MT.ESTUDIANTE_ID, EST.NOMBRE,
EST.APELLIDO ORDER BY PROMEDIO DESC
Calcula la media aritmética (promedio) de las notas, de todos los estudiantes que matricularon
alguna asignatura, se ordena de manera descendente por el valor del promedio, es decir, el de
mayor promedio primero

- MAX
SELECT MAX(NOTA)
FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON EST.ESTUDIANTE_ID =
MT.ESTUDIANTE_ID
WHERE EST.GENERO = 'F'

La consulta trae la máxima nota sacada por una estudiante de género ‘f’, (femenino).

- MIN
SELECT MIN(NOTA)
FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON EST.ESTUDIANTE_ID =
MT.ESTUDIANTE_ID
WHERE EST.NOMBRE LIKE '%RADAMEL%'
La consulta trae la mínima nota sacada por un estudiante cuyo nombre contenga la palabra
“RADAMEL”

- SUM

SELECT SUM(MT.NOTA), EST.NOMBRE, EST.APELLIDO


FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON EST.ESTUDIANTE_ID
= MT.ESTUDIANTE_ID
GROUP BY EST.NOMBRE,
EST.APELLIDO ORDER BY 1

Suma todas las notas de todos los estudiantes y los agrupa por nombre y apellido
y los ordena por la sumatoria de menor a mayor
INNER JOIN

SELECT M.MATRICULA_ID, E.NOMBRE, E.APELLIDO, E.TITULO


FROM ESTUDIANTES E
INNER JOIN MATRICULA M ON
M.ESTUDIANTE_ID=E.ESTUDIANTE_ID
ORDER BY M.MATRICULA_ID ASC

En la tabla se combinan datos donde hay coincidencias en las columnas


como se puede apreciar en la imagen anterior.

LEFT JOIN

SELECT M.MATRICULA_ID, E.NOMBRE, E.APELLIDO, E.TITULO


FROM ESTUDIANTES E
LEFT JOIN MATRICULA M ON
M.ESTUDIANTE_ID=E.ESTUDIANTE_ID
ORDER BY M.MATRICULA_ID ASC
En LEFT JOIN devuelve las filas válidas en la tabla pero al lado izquierdo de
con la palabra clave JOIN y los valores de la tabla al lado derecho como se
puede observar.

RIGHT JOIN

SELECT M.MATRICULA_ID, E.NOMBRE, E.APELLIDO, E.TITULO


FROM ESTUDIANTES E
RIGHT JOIN MATRICULA M ON M.ESTUDIANTE_ID=E.ESTUDIANTE_ID
ORDER BY M.MATRICULA_ID
CROSS JOIN
SELECT m.*, MATRICULA.* FROM ESTUDIANTES m CROSS JOIN MATRICULA

Como se muestra en la anterior imagen multiplicamos matricula por


estudiantes y nos arroja toda la información de la matrícula.

NATURAL JOIN

SELECT PR.NOMBRE, ASI.TITULO


FROM ASIGNATURA ASI
NATURAL JOIN PROGRAMA PR
ORDER BY ASI.TITULO

JOIN USING

SELECT PR.NOMBRE, ASI.TITULO


FROM ASIGNATURA ASI
JOIN PROGRAMA PR USING (PROGRAMA_ID)
ORDER BY PR.NOMBRE

FULL JOIN

1. Script de las consultas avanzadas con sus funciones.

COUNT
SELECT COUNT (*) as CANTIDAD, p.NOMBRE, a.PROGRAMA_ID
FROM ASIGNATURA a
INNER JOIN PROGRAMA p ON a.PROGRAMA_ID = p.PROGRAMA_ID
WHERE p.NOMBRE like '%Ingenieria%'
GROUP BY a.PROGRAMA_ID, p.NOMBRE
ORDER BY p.NOMBRE DESC
AVG

SELECT AVG(MT.NOTA) AS PROMEDIO, EST.NOMBRE, EST.APELLIDO


FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON MT.ESTUDIANTE_ID =
EST.ESTUDIANTE_ID
GROUP BY EST.NOMBRE, EST.APELLIDO
ORDER BY PROMEDIO ASC

MAX

SELECT MAX (NOTA)


FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON EST.ESTUDIANTE_ID =
MT.ESTUDIANTE_ID
WHERE EST.GENERO = 'M'
Podemos apreciar la máxima nota seleccionado la Max (nota)

MIN
SELECT MIN (NOTA)
FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON EST.ESTUDIANTE_ID =
MT.ESTUDIANTE_ID
WHERE EST.NOMBRE LIKE '%ALFREDO%'

SUM

SELECT SUM (MT.NOTA), EST.NOMBRE, EST.APELLIDO


FROM MATRICULA MT
LEFT JOIN ESTUDIANTES EST ON EST.ESTUDIANTE_ID =
MT.ESTUDIANTE_ID
GROUP BY EST.NOMBRE, EST.APELLIDO
ORDER BY 3
2. Realizar cinco procedimientos almacenados y cinco disparadores o
triggers.

- Trigger eliminarNota
CREAT OR REPLACE TRIGGER eliminarNota BEFORE INSERT ON Nota FOR
EACH ROW BEGIN
DELETE FROM NOTA_ID WHERE TUTOR_ID=:OLD.NOTA_ID;
END;

- CREATE OR REPLACE TRIGGER SumNotas BEFORE INSERT ON NOTAS


FOR EACH ROW
BEGIN
IF :new.NOTA < 0 then
:new.NOTA := 0;
END IF;
IF :new.NOTA > 5 then
:new.NOTA := 5;
END IF;
END;

- CREATE OR REPLACE TRIGGER updateEstudiante BEFORE INSERT ON


ESTUDIANTE FOR EACH ROW
BEGIN
IF :new.GENERO = 'H' then
:new.GENERO := 'M';
END IF;
IF :new.GENERO <> 'M' OR :new.GENERO <> 'F' then
:new.GENERO := 'I';
END IF;
END;
 
SCRIPT CON CINCO PROCEDIMIENTOS ALMACENADOS

1) Creación Procedimiento:

create or replace PROCEDURE insertPrograma( codigo IN NUMBER, nombre IN VARCHAR2)


AS
total number;
BEGIN
total:= 0;
SELECT count(*) into total FROM Programa where PROGRAMA_ID =
codigo; IF total = 0 then
INSERT INTO Programa (PROGRAMA_ID, NOMBRE) VALUES(codigo , nombre);
END IF;
IF total > 0 the
DBMS_OUTPUT.put_line('Programa con código:' || codigo || ' ya existe'
END IF;
END;

- Ejecutar el procedimiento:

BEGIN
insertPrograma('1020', 'Pedagogía Infantil');
insertPrograma('1022', 'Licenciatura en lenguas extranjeras');
END;

Se crea el procedimiento insertar programa, el cual recibe 2 parámetros, el código y el nombre, se


crea una variable llamada total de tipo numérico , el cual se inicializa en 0, se realiza una consulta
inicial a la tabla programa donde se consulta si existe el programa con el código recibido por el
parámetro, y se almacena en la variable total, luego se condiciona si el total es igual a 0, es decir,
que no existe el programa con código recibido, de ser así, se realiza una inserción a la tabla
programa, existe otra condición que establece si el total es mayor a 0, es decir, que el código del
programa ya existe, muestra un mensaje que dice “Programa con código ya existe”.

2) Creación Procedimiento:

create or replace PROCEDURE validaMatricula(


id_estudiante IN NUMBER,
id_oferta IN NUMBER
)
AS
total number;
BEGIN
total:= 0;
SELECT count(*) into total FROM Matricula where ESTUDIANTE_ID = id_estudiante and
OFERTA_ID = id_oferta ;
IF total = 0 then
DBMS_OUTPUT.put_line('El estudiante '|| id_estudiante || ' no se encuentra matriculado en la
oferta ' || id_oferta );
END IF;
IF total > 0 then
DBMS_OUTPUT.put_line('El estudiante '|| id_estudiante || ' ya se encuentra matriculado en
la oferta ' || id_oferta );
END IF;
END;

- Ejecutar el procedimiento:
BEGIN validaMatricula
(1,1); validaMatricula
(1,3);
END;
Valida si el estudiantes se encuentra matriculado en una oferta académica y muestra el mensaje
en caso de estarlo o no estarlo

3) Creación Procedimiento:

create or replace PROCEDURE actualizarEstudiante(


id_estudiante IN NUMBER,
nombre_est IN VARCHAR2,
apellido_est IN VARCHAR2
)
AS
BEGIN
UPDATE Estudiantes set NOMBRE = nombre_est, APELLIDO = apellido_est where
ESTUDIANTE_ID = id_estudiante;
END;

- Ejecutar el procedimiento:

BEGIN
actualizarEstudiante(5,'HAIR', 'PALACIOS RENTERIA');
END;

El procedimiento actualiza el nombre y el apellido del estudiante cuyo código es el que se envía en
el procedimiento.

4) Creación Procedimiento:

create or replace PROCEDURE eliminarTutor(


id_tutor IN NUMBER
)
AS
total number;
BEGIN
total:= 0;
SELECT count(*) into total FROM OFERTA_TUTOR where TUTOR_ID =
id_tutor; IF total = 0 then
DELETE FROM TUTOR WHERE TUTOR_ID = id_tutor ;
END IF;
IF total > 0 then
DBMS_OUTPUT.put_line('TUTOR ASIGNADO A UNA O MAS OFERTAS, NO SE PUEDE
ELIMINAR');
END IF;
END;
- Ejecutar el procedimiento:

BEGIN
eliminarTutor(112055555);
END;

El procedimiento valida si el tutor se encuentra relacionado a una oferta, de no ser así elimina el
tutor de la base de datos, de estar relacionado, muestra un mensaje que dice que el tutor se
encuentra asignado a una oferta.

5) Creación Procedimiento:

create or replace PROCEDURE promedioNotas(


id_estudiante IN NUMBER
)
AS
promedio number;
BEGIN
promedio := 0;
SELECT AVG(NOTA) into promedio FROM MATRICULA where ESTUDIANTE_ID =
id_estudiante; DBMS_OUTPUT.put_line('promedio:' || promedio );
END;

- Ejecutar el procedimiento:

BEGIN
promedioNotas(1);
END;

El procedimiento recibe el id del estudiante y calcula el promedio de las notas y muestra en


pantalla dicho promedio.
 
SCRIPT CON CINCO DISPARADORES O TRIGGERS.

1) Trigger validaMatricula

CREATE OR REPLACE TRIGGER validaMatricula BEFORE INSERT ON Matricula FOR EACH ROW
BEGIN
IF :new.NOTA < 0 then
:new.NOTA := 0;
END IF;
IF :new.NOTA > 5 then
:new.NOTA := 5;
END IF;
END;

El trigger “validaMatricula”, valida antes de registrar la matricula, si el valor de la nota enviado es


menor a 0, asigna 0 a la nota, y si la nota es mayor a 5, asigna el valor de la nota en 5, es decir, no
deja ingresar valores negativos y tampoco valores mayores a 5.

2) Trigger eliminarTutor

CREATE OR REPLACE TRIGGER eliminarTutor BEFORE DELETE ON TUTOR FOR EACH ROW
BEGIN
DELETE FROM OFERTA_TUTOR WHERE TUTOR_ID = :OLD.TUTOR_ID;
END;

El trigger antes de eliminar el tutor elimina los registros de la relación que existe en la tabla
oferta_ tutor donde el id del tutor sea el que se va a eliminar

3) Trigger updateTutor
CREATE OR REPLACE TRIGGER updateTutor BEFORE INSERT ON TUTOR FOR EACH ROW
BEGIN
IF :new.GENERO = 'H' then
:new.GENERO := 'M';
END IF;
IF :new.GENERO <> 'M' OR :new.GENERO <> 'F' then
:new.GENERO := 'I';
END IF;
END;

El trigger valida si el valor ingresado en el género al insertar un registro es “H”, le asigna “M”, y en
caso que sea diferente de “H” o “M” le asigna el género “I” de indefinido
4) Trigger capitalizeEstudiante

CREATE OR REPLACE TRIGGER capitalizeEstudiante BEFORE INSERT ON ESTUDIANTES FOR EACH


ROW
DECLARE
l_nombre VARCHAR2 (100) := :new.NOMBRE;
l_apellido VARCHAR2 (100) := :new.APELLIDO;
BEGIN
:new.NOMBRE := INITCAP(l_nombre);
:new.APELLIDO := INITCAP(l_apellido);
END;

Al insertar un nuevo estudiante, pone las primeras letras del nombre y apellido en mayúsculas
FASE 3: ADMINISTRACIÓN

a. CREAR Y GESTIONAR ESTRUCTURAS DE ALMACENAMIENTO

 Ingresa con cuenta de administrador y realiza los siguientes


procesos:


 Crear dos "tablespace" llamados NOMINA y ACADEMICO, que
contendrán datos relativos a las aplicaciones de nómina y datos
académicos de los empleados de una empresa, según las
siguientes características:
ACADEMICOO NOMINA

Parámetros Tamaño 1M 1M
almacenamiento inicial
Autoextensi SI SI
ble
Extensión 200K 100K
Tamaño 1400K 1500K
máximo

Initial 16K 16K

Next 16K 16K


Minextents 1 1
Maxextents 3 3

Solución
CREATE TABLESPACE academico
datafile 'C:\oracle\cursobda\academico.bdf' size 1M
autoextend on
next 200K
maxsize 1400K
default storage (INITIAL 16K NEXT 16K MINEXTENTS 1 MAXEXTENTS 3);
CREATE TABLESPACE NOMINA
datafile 'C:\oracle\cursobda\nomina.bdf' size 1M
autoextend on
next 100K
maxsize 1500K
default storage (INITIAL 16K NEXT 16K MINEXTENTS 1 MAXEXTENTS 3);
B. CREAR Y GESTIONAR USUARIOS:

 Buscar en la documentación en línea y en la base de datos el


contenido de las vistas:

a. dba_profiles
a. dba_roles
b. dba_users
c. dba_role_privs
d. dba_tab_privs
e. dba_sys_privs

Solución

a) dba_profiles

Muestra todos los perfiles y sus límites.


SELECT * FROM dba_profiles WHERE profile='DEFAULT';
b) dba_roles
Enumera todos los roles que existen en la base de datos.
SELECT * FROM DBA_ROLES;

c) dba_users
Describe a todos los usuarios de la base de datos.
SELECT * FROM DBA_USERS;

d) dba_role_privs
Describe los roles otorgados a todos los usuarios y roles en la base de datos.
SELECT * FROM DBA_ROLE_PRIVS;
e) dba_tab_privs
Describe todas las concesiones de objetos en la base de datos.

USER_TAB_PRIVS describe las concesiones de objetos para las cuales el


usuario actual es el propietario del objeto, el otorgante o gran
f) dba_sys_privs
Describe los privilegios del sistema otorgados a los usuarios y roles.

 Conectarse como usuario SYSTEM a la base de datos y crear un


usuario llamado “administrador” autentificado por la base de
datos. Indicar como "tablespace" por defecto USERS y como
"tablespace" temporal TEMP; asignar una cuota de 500K en el
"tablespace" USERS.

Solución

CREATE USER ADMINISTRADOR IDENTIFIED BY masterkey DEFAULT TABLESPACE USERS


TEMPORARY TABLESPACE temp QUOTA 500k ON USERS;
 Averiguar qué privilegios de sistema, roles y privilegios sobre
objetos tiene concedidos el usuario “administrador”.

Solución

Privilegios de roles
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'ADMINISTRADOR';

Privilegios sobre objetos


SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'ADMINISTRADOR';

Privilegios del sistema


SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ADMINISTRADOR';

Actualmente una vez se crea ‘ADMINISTRADOR’, el usuario no posee ningún privilegio sobre el
sistema, rol u objetos.

 Otorgar el privilegio “CREATE SESSION” al usuario “administrador”


e intentar de nuevo la conexión

Solución
GRANT CREATE SESSION TO ADMINISTRADOR;
 Conectarse como usuario “administrador” y crear un usuario
 llamado “prueba00” que tenga como "tablespace" por defecto
USERS y como "tablespace" temporal TEMP; asignar una cuota de
0K en el "tablespace" USERS. ¿Es posible hacerlo?

Solución

Se ingresa con el usuario ADMINISTRADOR

CREATE USER PRUEBA00


IDENTIFIED BY masterkey DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE temp QUOTA 0K
ON USERS;
No se puede crear el usuario “PRUEBA00”, debido a que el usuario “administrador” no tiene los
permisos suficientes para crear el usuario

 Conectado como usuario SYSTEM, otorgar el privilegio “create


user” al usuario “administrador” y repetir el ejercicio anterior.

Solución

GRANT CREATE USER TO ADMINISTRADOR;

Se asigna el privilegio “CREATE USER” crear usuarios al usuario ADMINISTRADOR.

Se ejecuta nuevamente el script para crear usuarios y se crea el usuario on éxito

CREATE USER PRUEBA00


IDENTIFIED BY masterkey DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE temp QUOTA 0K
ON USERS;
 Averiguar qué usuarios de la base de datos tienen asignado el
privilegio “create user” de forma directa, ¿qué vista debe ser
consultada?

Solución

Se ejecuta la vista DBA_SYS_PRIVS, y para determinar específicamente cuales


tienen el privilegio de “CREATE USER”, en el where condicionamos el privilegio.

SELECT * FROM DBA_SYS_PRIVS WHERE PRIVILEGE = 'CREATE USER';

C. GESTIONAR ESQUEMAS Y OBJETOS

 crear un perfil y cinco roles cada con un grupo de privilegios, estos


roles serán asignados a cada usuario de la base de datos, estos
usuarios son los que integran el grupo colaborativo.

Solución
Crear Perfil
CREATE PROFILE UNADBD
LIMIT
COMPOSITE_LIMIT DEFAULT
SESSIONS_PER_USER DEFAULT
CPU_PER_SESSION DEFAULT
CPU_PER_CALL DEFAULT
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT
IDLE_TIME DEFAULT
CONNECT_TIME DEFAULT
PRIVATE_SGA DEFAULT
FAILED_LOGIN_ATTEMPTS DEFAULT
PASSWORD_LIFE_TIME DEFAULT
PASSWORD_REUSE_TIME DEFAULT
PASSWORD_REUSE_MAX DEFAULT
PASSWORD_VERIFY_FUNCTION DEFAULT
PASSWORD_LOCK_TIME DEFAULT
PASSWORD_GRACE_TIME DEFAULT

Creación de Roles
CREATE ROLE "CONSULTA" IDENTIFIED BY VALUES '31A9328C6AD1D84B';
GRANT SELECT ANY TRANSACTION TO "CONSULTA";
GRANT EXECUTE ANY CLASS TO "CONSULTA";
GRANT EXECUTE ANY PROGRAM TO "CONSULTA";
GRANT DEBUG ANY PROCEDURE TO "CONSULTA";
GRANT DEBUG CONNECT SESSION TO "CONSULTA";
GRANT SELECT ANY DICTIONARY TO "CONSULTA";
GRANT EXECUTE ANY INDEXTYPE TO "CONSULTA";
GRANT EXECUTE ANY OPERATOR TO "CONSULTA";
GRANT EXECUTE ANY LIBRARY TO "CONSULTA";
GRANT EXECUTE ANY PROCEDURE TO "CONSULTA";
GRANT SELECT ANY SEQUENCE TO "CONSULTA";
GRANT SELECT ANY TABLE TO "CONSULTA"; GRANT
LOCK ANY TABLE TO "CONSULTA";
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'CONSULTA';
CREATE ROLE "INVITADO" IDENTIFIED BY VALUES 'C5DEDC2A170A8DED';
GRANT SELECT ANY TRANSACTION TO "INVITADO";
GRANT SELECT ANY DICTIONARY TO "INVITADO";
GRANT SELECT ANY SEQUENCE TO "INVITADO";
GRANT SELECT ANY TABLE TO "INVITADO";
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'INVITADO';

CREATE ROLE "ADM" IDENTIFIED BY VALUES '60D4C5D19198914A';


GRANT ADMINISTER DATABASE TRIGGER TO "ADM" WITH ADMIN OPTION;
GRANT GRANT ANY PRIVILEGE TO "ADM" WITH ADMIN OPTION; GRANT
GRANT ANY ROLE TO "ADM" WITH ADMIN OPTION;
GRANT ADMINISTER ANY SQL TUNING SET TO "ADM" WITH ADMIN OPTION;
GRANT ADMINISTER SQL TUNING SET TO "ADM" WITH ADMIN OPTION;
GRANT IMPORT FULL DATABASE TO "ADM";
GRANT GRANT ANY OBJECT PRIVILEGE TO "ADM" WITH ADMIN OPTION;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ADM';
CREATE ROLE "SQA" IDENTIFIED BY VALUES '13EEA0EE1C0DD0BE';
GRANT SELECT ANY SEQUENCE TO "SQA";
GRANT SELECT ANY TABLE TO "SQA";
GRANT SELECT ANY TRANSACTION TO "SQA";
GRANT SELECT ANY DICTIONARY TO "SQA";
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SQA';

CREATE ROLE "DEVELOPER" IDENTIFIED BY VALUES '010234AC9EB16D12';


GRANT CREATE ANY DIRECTORY TO "DEVELOPER";
GRANT CREATE ANY MATERIALIZED VIEW TO "DEVELOPER";
GRANT CREATE ANY INDEX TO "DEVELOPER"; GRANT CREATE
ANY CLUSTER TO "DEVELOPER";
GRANT CREATE ANY JOB TO "DEVELOPER";
GRANT CREATE ANY CONTEXT TO "DEVELOPER";
GRANT CREATE ANY DIMENSION TO "DEVELOPER";
GRANT CREATE ANY INDEXTYPE TO "DEVELOPER";
GRANT CREATE ANY OPERATOR TO "DEVELOPER";
GRANT CREATE ANY LIBRARY TO "DEVELOPER";
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'DEVELOPER';
Creación de usuarios y asignación de roles
CREATE USER "UNAD_CAMILO_RENGIFO" IDENTIFIED BY VALUES '1151F7B1E827140A'
DEFAULT TABLESPACE "ACADEMICO" TEMPORARY TABLESPACE "TEMP";
GRANT "DEVELOPER" TO "UNAD_CAMILO_RENGIFO";

CREATE USER "UNAD_JEISSON_LENIS" IDENTIFIED BY VALUES '541BFD3B87C15E1C'


DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP";
GRANT "CONSULTA" TO "UNAD_JEISSON_LENIS";

CREATE USER "UNAD_LUIS_SALAMANCA" IDENTIFIED BY VALUES '01B4C1ADC43258E5'


DEFAULT TABLESPACE "SYSAUX" TEMPORARY TABLESPACE "TEMP";
GRANT "INVITADO" TO "UNAD_LUIS_SALAMANCA";

CREATE USER "UNAD_CARLOS_ARENAS" IDENTIFIED BY VALUES 'FAC1047C5355D512'


DEFAULT TABLESPACE "ACADEMICO" TEMPORARY TABLESPACE "TEMP";
GRANT "ADM" TO "UNAD_CARLOS_ARENAS";

CREATE USER "UNAD_YADIR_BEJARANO" IDENTIFIED BY VALUES '1151F7B1E827140A'


DEFAULT TABLESPACE "ACADEMICO" TEMPORARY TABLESPACE "TEMP";
GRANT "SQA" TO "UNAD_YADIR_BEJARANO";

 Programar con el lenguaje SQL el Scripts DCL para otorgar los


permisos sobre los objetos de la base de datos a otros
usuarios/esquemas.

GRANT SELECT, INSERT, UPDATE, DELETE ON Programa TO UNAD_CAMILO_RENGIFO,


UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA, UNAD_CARLOS_ARENAS,
UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Prerrequisito TO
UNAD_CAMILO_RENGIFO, UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA,
UNAD_CARLOS_ARENAS, UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Asignatura TO UNAD_CAMILO_RENGIFO,
UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA, UNAD_CARLOS_ARENAS,
UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Estudiantes TO UNAD_CAMILO_RENGIFO,
UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA, UNAD_CARLOS_ARENAS,
UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Tutor TO
UNAD_CAMILO_RENGIFO, UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA,
UNAD_CARLOS_ARENAS, UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Aula TO UNAD_CAMILO_RENGIFO,
UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA, UNAD_CARLOS_ARENAS,
UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Horario TO
UNAD_CAMILO_RENGIFO, UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA,
UNAD_CARLOS_ARENAS, UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Oferta_academica TO UNAD_CAMILO_RENGIFO,
UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA, UNAD_CARLOS_ARENAS,
UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Matricula TO UNAD_CAMILO_RENGIFO,
UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA, UNAD_CARLOS_ARENAS,
UNAD_YADIR_BEJARANO;
GRANT SELECT, INSERT, UPDATE, DELETE ON Oferta_tutor TO UNAD_CAMILO_RENGIFO,
UNAD_JEISSON_LENIS, UNAD_LUIS_SALAMANCA, UNAD_CARLOS_ARENAS,
UNAD_YADIR_BEJARANO;

Link carpeta compartida Google Drive:


https://drive.google.com/drive/folders/1esfZCKUfTsPPrE4AW6uPo
4LJcLTbLE3A?usp=sharing
CONCLUSIONES

Con el desarrollo del presente trabajo se comprendió la importancia de desarrollar los


diferentes formatos donde se describen las diferentes entidades con sus atributos y
relaciones, para poder continuar con la elaboración del modelo entidad relación de
manera adecuada. Con el desarrollo de una buena base de datos, depende netamente de
cómo esta se diseñe, para lo cual tenemos que seguir los pasos esenciales que se nos
presentan ya que los demás dependerá del tipo de base de datos, pero al seguir los pasos
podremos mejorar la estabilidad y rapidez de consulta de la besa de datos.

Se comprende la diferencia entre cada uno de los joins existentes y se identifica en que momento
usar cada uno, de igual manera se aprende a realizar consultas con las diferentes funciones que
sirven para contar, sumar, hallar la media aritmética, saber el registro máximo y mínimo en las
diferentes consultas realizadas, se identifica las funcionalidades de los procedimientos y los
disparadores y se ve la utilidad de estos.

También podemos apreciar como con consultas podemos hacer operaciones matemáticas
acoplándolas a la necesidad que veamos pertinente de acuerdo con la petición que le vayamos a
hacer a la base de datos. La creación de consultas de base de datos consta de archivos que
permiten realizar muchas tareas diferentes con los datos que se pueden ver. También se pueden
utilizar para controlar los registros que visualiza la consulta no contiene información de base de
datos, si no tan solo las instrucciones necesarias para seleccionar los registros y campos
requeridos de una base de datos.

De igual manera se comprende la importancia de mantener la integridad y seguridad de la base de


datos, se crean los diferentes usuarios, y roles y se asignan los privilegios de los diferentes objetos
a cada rol, para que solo puedan realizar determinada tarea.

Se logra la creación de un perfil y cinco roles cada con grupo de privilegios, se conoce que los roles
serán asignados a cada usuario de la base de datos

Se programar con el lenguaje SQL el Scripts DCL para otorgar los permisos sobre los objetos de la
base de datos a otros usuarios/esquemas
BIBLIOGRAFÍA

Sosa Flores, M. & López Vázquez, M. (2007) Diseño de bases de datos relacionales. Córdoba, AR: El
Cid Editor. pág. 20 -42. Recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=22&docID=3175111&tm
=1531495677522

Jiménez, C. M. Y. (2014). Bases de datos relacionales y modelado de datos (uf1471). Recuperado


de https://bibliotecavirtual.unad.edu.co:2538

https://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?ppg=16&docID=4184006&t
m=1542156304402

En este recurso OVI se da una introducción a los conceptos básicos y la importancia del manejo de
bases de datos transaccionales.

Triana Martinez, D. (2018). Introducción Bases de Datos transaccionales [Formato


video] Recuperado de http://hdl.handle.net/10596/14503

Quintana, G., M., M., & Aliaga, J. l.(2010). Aprende SQL. Castellón de la Plana, ES: Universitat
Jaume I. Servei de Comunicació iPublicacions. Recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=112&docID=3218178&
t m=1531497265422

ORACLE-BASE. SQL for Beginners (Part 5) : Joins Recuperado de https://oracle-


base.com/articles/misc/sql-for-beginners-joins

Camuña Rodríguez, J. (2014) Lenguajes de definición y modificación de datos SQL (UF1472). Madrid,
ESPAÑA: IC Editorial. Pág. 59 -62 Recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=65&docID=4184070&tm
=1531496292249

Hueso, Ibáñez, Luis. Administración de sistemas gestores de bases de datos, RA-MA Editorial,
2014. ProQuest Ebook Central, Pag 114- 128 recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=115&docID=3229065&
t m=1531497705957

Quintana, G., M., M., & Aliaga, J. l.(2010). Aprende SQL. Castellón de la Plana, ES: Universitat
Jaume I. Servei de Comunicació iPublicacions. Recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=112&docID=3218178&
t m=1531497265422

Ramakrishnan, Raghu, and Johannes Gehrke. Sistemas de gestión de bases de datos (3a.
ed.), McGraw-Hill España, 2007. ProQuest Ebook Central, pág. 442- 453 recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=469&docID=3195347&
t m=1531498791692

San, Martín González, Enrique. Salvaguarda y seguridad de los datos: administración de bases de
datos (UF1473), IC Editorial, 2014. ProQuest Ebook Central, pág. 166-178recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=172&docID=4184153&
t m=1531499076799

Abelló, Alberto, and María Elena Rodríguez. Diseño y administración de bases de datos,
Universitat Politècnica de Catalunya, 2006. ProQuest Ebook Central, recuperado de
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=240&docID=3429640&t
m=1531345651755

Grabación de la web conferencia del curso - https://goo.gl/DPmfsp


Entorno de conocimiento - Guía para el desarrollo de las funciones - https://ebookcentral-
proquest-
com.bibliotecavirtual.unad.edu.co/lib/unadsp/reader.action?docID=3218178&ppg=112&tm=1531
497265422

Entorno de conocimiento - Guía para el desarrollo de procedimientos almacenados -


https://ebookcentral-proquest
com.bibliotecavirtual.unad.edu.co/lib/unadsp/reader.action?docID=4184070&ppg=65&tm=15314
96292249

Entorno de conocimiento - Desarrollo de los disparadores o triggers - https://ebookcentral-


proquest-
com.bibliotecavirtual.unad.edu.co/lib/unadsp/reader.action?docID=3229065&ppg=115&tm=1531
497705957

Foro de para la entrega de la actividad de la Unidad 3: Fase 3 – Administración de bases de datos -


https://campus35.unad.edu.co/ecbti49/mod/forum/discuss.php?d=13166
Unidad 3 – Seguridad de base de datos -
https://campus35.unad.edu.co/ecbti49/mod/page/view.php?id=3312

Ramakrishnan, Raghu, and Johannes Gehrke. Sistemas de gestión de bases de datos (3a. ed.),
McGraw-Hill España, 2007. ProQuest Ebook Central, pág. 442- 453 recuperado de -
https://ebookcentral-proquest-
com.bibliotecavirtual.unad.edu.co/lib/unadsp/reader.action?docID=3195347&ppg=469&tm=1531
498791692
San, Martín González, Enrique. Salvaguarda y seguridad de los datos: administración de bases de
datos (UF1473), IC Editorial, 2014. ProQuest Ebook Central, pág. 166-178recuperado de -
https://ebookcentral-proquest-
com.bibliotecavirtual.unad.edu.co/lib/unadsp/reader.action?docID=4184153&ppg=172&tm=1531
499076799