Sei sulla pagina 1di 41

Fase 2 - Implementación:

definiciones de la base de datos a


nivel conceptual y programas de
aplicación

UNIVERSIDAD NACIONAL Base de Datos Avanzada


ABIERTA Y A DISTANCIA
301125_5
Tutor:
Luis Ernesto Bonilla

Estudiantes:
Vladimir Henríquez Ílias
Escuela de Ciencias Básicas, Sandra Paola Molina
Tecnología e Ingeniería Ronald Baez

ECBTI49
301125A_611

Bogotá D.C. 11 de abril de 2019


BASE DE DATOS AVANZADA

CÓDIGO: 301125

Fase 2 - Implementación: definiciones de la base de datos a nivel conceptual y programas

de aplicación

Presentado a:

Luis Ernesto Bonilla

Tutor

Entregado por:

Vladimir Henríquez Ílias

Sandra Paola Molina Bravo

Ronald Javier Baezidos (Estudiante 2)

Código: XXXXX

Grupo: 301125_5

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA - UNAD

ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA

11 de abril de 2019

Bogotá D.C.
Contenido
Introducción ................................................................................................................................................ 4
Desarrollo Actividad ................................................................................................................................... 0
Script de las consultas avanzadas con joins .......................................................................................... 0
Script de las consultas avanzadas con funciones agregadas.............................................................. 13
Script con cinco procedimientos almacenados ................................................................................... 19
Script con cinco disparadores o triggers ............................................................................................. 25
Conclusiones ................................................................................................................................................ 0
Bibliografía .................................................................................................................................................. 1
Listado de Ilustraciones

Ilustración 1: Diseño diagrama entidad - relación ......................... Error! Bookmark not defined.
Ilustración 2:Modelo Relacional .................................................... Error! Bookmark not defined.
Ilustración 3: Creación de cuenta APEX ....................................... Error! Bookmark not defined.
Ilustración 4: Creación control de acceso y permisos .................... Error! Bookmark not defined.
Ilustración 5: Ejemplo consulta 1 .................................................. Error! Bookmark not defined.
Ilustración 6: Ejemplo consulta 2 .................................................. Error! Bookmark not defined.
Ilustración 7: Ejemplo consulta 3 .................................................. Error! Bookmark not defined.
Ilustración 8: Ejemplo consulta 4 .................................................. Error! Bookmark not defined.
Ilustración 9: Ejemplo consulta 5 .................................................. Error! Bookmark not defined.
Listado de Tablas

Tabla 1: Descripción de entidades ................................................. Error! Bookmark not defined.


Tabla 2: Descripción de Atributos y restricciones ......................... Error! Bookmark not defined.
Tabla 3: Matriz de Relaciones ....................................................... Error! Bookmark not defined.
Tabla 4: Descripción ampliada de relaciones ................................ Error! Bookmark not defined.
Introducción

El presente trabajo muestra los conocimientos adquiridos durante la fase dos del curso de base de

datos avanzada, correspondiente al manejo de INNER JOINS, consultas avanzadas y

procedimientos almacenados. Asimismo, se pretende que los estudiantes afiancen sus

conocimientos en los conceptos básicos de base de datos como son: entidad, atributos, relación,

domino y normalización tomando como practica el caso de estudio de la Oficina de Registro y

control de la UNAD, donde se realizará población de tablas y consultas.


Desarrollo Actividad

1. Leer y comprender la temática propuesta para la Unidad 1 - Bases de Datos Transaccionales y relacionales que corresponde a la

Fase 1- Modelamiento.

2. A partir de la lectura realizada al contenido temático de la unidad 3; seleccionar y responder una de las cinco preguntas

motivadoras en un párrafo de su propia autoría que contenga mínimo 200 palabras y máximo 300 palabras y hacer un comentario

significativo sobre la respuesta de cada compañero.

Script de las consultas avanzadas con joins

a. Realizar una consulta por cada join, cada enlace lo lleva aun ejemplo que puede tomar de referencia para el desarrollo de la

actividad:

 [INNER] JOIN ... ON

 LEFT [OUTER] JOIN

 RIGHT [OUTER] JOIN

 FULL [OUTER] JOIN

 CROSS JOIN

 NATURAL JOIN

 [INNER] JOIN ... USING


 Sentencia SQL con LEFT [OUTER] JOIN

Devuelve el nombre del estudiante todas las filas de A, incluyendo las filas comunes entre A y B.

select TBL_EST.EST_P_NOM,TBL_EST.EST_P_APE,TBL_ASIG.ASIG_NOM_ASIG from TBL_ASIG left outer join TBL_EST

on TBL_ASIG.ASIG_NOM_ASIG = TBL_ASIG.ASIG_NOM_ASIG ;

SELECT EST_ID_EST AS "Código Estudiante", EST_P_NOM AS "Nombre Estudiante", EST_P_APE AS "Apellido Estudiante",

MAT_ID_MAT AS "Código Matricula", MAT_ID_ASIG AS "Código Asignatura", MAT_ID_PROG AS "Código Programa" FROM

TBL_EST LEFT JOIN TBL_MAT ON EST_ID_EST = TBL_EST_EST_ID_EST where EST_ID_EST >= 0 ORDER BY

EST_ID_EST, MAT_ID_MAT;
 RIGHT [OUTER] JOIN

Devuelve el nombre del estudiante por la derecha te dará todas las filas de B, incluyendo las filas comunes con A.

Select TBL_EST.EST_P_NOM,TBL_EST.EST_P_APE,TBL_ASIG.ASIG_NOM_ASIG from TBL_ASIG right outer join TBL_EST

on TBL_ASIG.ASIG_NOM_ASIG = TBL_ASIG.ASIG_NOM_ASIG ;
SELECT EST_ID_EST AS "Código Estudiante", EST_P_NOM AS "Nombre Estudiante", EST_P_APE AS "Apellido Estudiante",

MAT_ID_MAT AS "Código Matricula", MAT_ID_ASIG AS "Código Asignatura", MAT_ID_PROG AS "Código Programa" FROM

TBL_EST RIGHT OUTER JOIN TBL_MAT ON EST_ID_EST = TBL_EST_EST_ID_EST where EST_ID_EST >= 0 ORDER BY

EST_ID_EST, MAT_ID_MAT;
FULL [OUTER] JOIN

Devuelve el nombre del estudiante en la unión de A y B; es decir, todas las filas de A y todas las filas de B. Si una fila en A no tiene

una fila correspondiente en B, la porción de B es null, y vice versa.

Select TBL_EST.EST_P_NOM,TBL_EST.EST_P_APE,TBL_ASIG.ASIG_NOM_ASIG from TBL_ASIG full outer join TBL_EST

on TBL_ASIG.ASIG_NOM_ASIG = TBL_ASIG.ASIG_NOM_ASIG ;
SELECT EST_ID_EST AS "Código Estudiante", EST_P_NOM AS "Nombre Estudiante", EST_P_APE AS "Apellido Estudiante",

MAT_ID_MAT AS "Código Matricula", MAT_ID_ASIG AS "Código Asignatura", MAT_ID_PROG AS "Código Programa" FROM

TBL_EST FULL OUTER JOIN TBL_MAT ON EST_ID_EST = TBL_EST_EST_ID_EST where EST_ID_EST >= 0 ORDER BY

EST_ID_EST, MAT_ID_MAT;
 CROSS JOIN

muestran todas las combinaciones de todos los registros de las tablas combinadas

Select TBL_EST.EST_P_NOM,TBL_EST.EST_P_APE,TBL_ASIG.ASIG_NOM_ASIG from TBL_ASIG cross join TBL_EST

order by TBL_EST.EST_P_NOM,TBL_EST.EST_P_APE, TBL_ASIG.ASIG_NOM_ASIG;


SELECT EST_ID_EST AS "Código Estudiante", EST_P_NOM AS "Nombre Estudiante", EST_P_APE AS "Apellido Estudiante",

MAT_ID_MAT AS "Código Matricula", MAT_ID_ASIG AS "Código Asignatura", MAT_ID_PROG AS "Código Programa" FROM

TBL_EST CROSS JOIN TBL_MAT ORDER BY EST_ID_EST, MAT_ID_MAT;


SELECT PROF_ID_PROF AS "Código Profesor", PROF_P_NOM AS "Nombre Profesor", PROF_P_APE AS "Apellido Profesor",

ASIG_ID_ASIG AS "Código Asignatura", ASIG_NOM_ASIG AS "Nombre Asignatura" FROM TBL_PROF CROSS JOIN

TBL_ASIG ORDER BY PROF_ID_PROF;


 NATURAL JOIN

Establece una relación de igualdad entre las tablas a través de los campos que tengan el mismo nombre en ambas tablas

Select TBL_EST.EST_P_NOM,TBL_EST.EST_P_APE,TBL_ASIG.ASIG_NOM_ASIG from TBL_ASIG natural join TBL_EST

order by TBL_EST.EST_P_NOM,TBL_EST.EST_P_APE, TBL_ASIG.ASIG_NOM_ASIG;


SELECT PROF_ID_PROF AS "Código Profesor", PROF_P_NOM AS "Nombre Profesor", PROF_P_APE AS "Apellido Profesor",

ASIG_ID_ASIG AS "Código Asignatura", ASIG_NOM_ASIG AS "Nombre Asignatura" FROM TBL_PROF NATURAL JOIN

TBL_ASIG ORDER BY PROF_ID_PROF;


 [INNER] JOIN ... USING

SELECT EST_ID_EST AS "Código Estudiante", EST_P_NOM AS "Nombre Estudiante", EST_P_APE AS "Apellido Estudiante",

MAT_ID_MAT AS "Código Matricula", MAT_ID_ASIG AS "Código Asignatura", MAT_ID_PROG AS "Código Programa" FROM

TBL_EST INNER JOIN TBL_MAT ON EST_ID_EST = TBL_EST_EST_ID_EST where EST_ID_EST >= 0 ORDER BY

EST_ID_EST;
SELECT PROF_ID_PROF AS "Código Profesor", PROF_P_NOM AS "Nombre Profesor", PROF_P_APE AS "Apellido Profesor",

PROG_ID_PROG AS "Código Programa", PROG_NOM_PROG AS "Nombre Programa" FROM TBL_PROF JOIN TBL_PROG

USING (TBL_DPTO_DPTO_ID_DPTO) ORDER BY PROF_P_NOM, PROG_ID_PROG;


b. Realizar una consulta avanzada por cada función agregada.

Función Significado
Cuenta los elementos de un grupo. Se suele indicar un
asterisco (COUNT (*)) en lugar de una expresión, ya que
COUNT(expresión)
la cuenta no varía por indicar una expresión concreta; el
resultado siempre es el número de elementos del grupo.
SUM(expresión) Suma los valores de la expresión
AVG(expresión) Calcula la media aritmética sobre la expresión indicada
MIN(expresión) Mínimo valor que toma la expresión indicada
MAX(expresión) Máximo valor que toma la expresión indicada

Consultar los siguientes ejemplos de referencia:


SQL for Beginners : The WHERE Clause
SQL for Beginners: The ORDER BY Clause
SQL for Beginners: The GROUP BY Clause and HAVING Clause
Script de las consultas avanzadas con funciones agregadas

Tabla notas
Cuenta el numero de estudiantes

SELECT COUNT(*) FROM TBL_EST;

SELECT(SELECT COUNT(*) FROM TBL_EST) AS Estudiantes_Total,

(SELECT COUNT(*) FROM TBL_ASIG) AS Asignaturas_Total

FROM dual
Suma todas las notas de la tabla

SELECT SUM(NOT_NOT) FROM TBL_NOTAS;

SELECT e.EST_P_NOM AS "Nombre Estudiante",SUM(n.NOT_NOT) AS "Suma Notas" FROM TBL_NOTAS n, TBL_EST e

WHERE n.NOT_ID_EST = e.EST_ID_EST GROUP BY e.EST_P_NOM;


Calcula la media aritmética de las notas

SELECT AVG(NOT_NOT) FROM TBL_NOTAS;

ELECT e.EST_P_NOM AS "Nombre Estudiante",AVG(n.NOT_NOT) AS "Suma Notas" FROM TBL_NOTAS n, TBL_EST e


WHERE n.NOT_ID_EST = e.EST_ID_EST GROUP BY e.EST_P_NOM;
Devuelve la nota minima

SELECT MIN(NOT_NOT) FROM TBL_NOTAS;

SELECT e.EST_P_NOM AS "Nombre Estudiante",MIN(n.NOT_NOT) AS "Suma Notas" FROM TBL_NOTAS n, TBL_EST e


WHERE n.NOT_ID_EST = e.EST_ID_EST GROUP BY e.EST_P_NOM;
Devuelve la nota maxima

SELECT MAX(NOT_NOT) FROM TBL_NOTAS;

SELECT e.EST_P_NOM AS "Nombre Estudiante",MAX(n.NOT_NOT) AS "Suma Notas" FROM TBL_NOTAS n, TBL_EST e


WHERE n.NOT_ID_EST = e.EST_ID_EST GROUP BY e.EST_P_NOM;
SELECT MAX(NOT_NOT) AS "Nota Maxima" FROM TBL_NOTAS;

Script con cinco procedimientos almacenados

c. Realizar cinco procedimientos almacenados y cinco disparadores o triggers para realizar la actividad consultar los ejemplos que

se encuentran en el siguiente enlace.

https://oracle-base.com/articles/misc/introduction-to-plsql

PROCEDIMIENTO ALMACENADOS

Procedimiento 1:

CREATE OR REPLACE PROCEDURE tabla_notas (cursorMemoria OUT SYS_REFCURSOR)

AS

BEGIN
OPEN cursorMemoria FOR SELECT * FROM TBL_NOTAS;

END;

Procedimiento 2: A de un procedimiento insertar información a la tabla de nacionalidad, se crea el procedimiento como se muestra a

continuación.

create or replace procedure "NALINSERT"

(Cod_Nal IN NUMBER,

Nacionalidad IN VARCHAR2,

NACUS IN VARCHAR2,
NOMFO IN VARCHAR2,

ISO2 IN VARCHAR2,

ISO3 IN VARCHAR2,

PHONE_CODE VARCHAR2)

is

begin

INSERT INTO TBL_NAL (NAL_COD_NAL, NAL_NAL, NACUS, NOMFO, ISO2, ISO3, PHONE_CODE) VALUES (Cod_Nal,

Nacionalidad, NACUS, NOMFO, ISO2, ISO3, PHONE_CODE);

end;

Ahora se realiza la ejecución del procedimiento, donde solo se llama al procedimiento y se ingresan los valores, como se muestra a

continuación:

begin

NALINSERT(347, 'Zuazua', 'Zuazua', 'Zuazua', 'ZU', 'ZUA', 4445);

end;

Finalmente, se realiza una selección para verificar que la operación tuvo exito

SELECT * FROM TBL_NAL;


Procedimiento 3: Teniendo en cuenta la identificación del estudiante, se obtiene información de nombre, teléfono y correo.

create or replace PROCEDURE EST_INFO(est_id VARCHAR2)

IS

var_cantest TBL_EST%ROWTYPE;

BEGIN

-- entrega la información teniendo en cuenta la identificación del estudiante

SELECT * INTO var_cantest FROM TBL_EST WHERE EST_ID_EST=est_id;

-- muestra la información de Primer Nombre, el teléfono y el correo


DBMS_OUTPUT.PUT_LINE( 'Primer Nombre: ' || var_cantest.EST_P_NOM || ', Teléfono: ' || var_cantest.EST_TEL || ', Correo:<' ||

var_cantest.EST_CORREO ||'>' );

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE( SQLERRM );

END;

Se realiza un verificación realizando la consulta de la información a través de la identificación 75489562:

Procedimiento 4: Teniendo en cuenta la identificación del profesor, se obtiene información de nombre, dirección, ciudad, teléfono y

correo.
create or replace PROCEDURE PROF_INFO(prof_id VARCHAR2)

IS

var_contprof TBL_PROF%ROWTYPE;

BEGIN

-- entrega la información teniendo en cuenta la identificación del profesor

SELECT * INTO var_contprof FROM TBL_PROF WHERE PROF_ID_PROF=prof_id;

-- muestra la información de Primer Nombre, el teléfono y el correo

DBMS_OUTPUT.PUT_LINE( 'Primer Nombre: ' || var_contprof.PROF_P_NOM || ', Dirección: ' || var_contprof.PROF_DIR || ',

Ciudad: ' || var_contprof.PROF_CIU || ', Teléfono: ' || var_contprof.PROF_TEL || ', Correo:<' || var_contprof.PROF_CORREO ||'>' );

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE( SQLERRM );

END;

Se realiza una verificación realizando la consulta de la información a través de la identificación 72546389:


Script con cinco disparadores o triggers

DISPARADOR TRIGGER

TRIGGER 1.

CREATE OR REPLACE TRIGGER REGISTRO_TITULO

AFTER INSERT ON TBL_TIT

FOR EACH ROW

DECLARE

V_USERNAME VARCHAR2(50);

V_FECHA DATE;
BEGIN

SELECT USER INTO V_USERNAME FROM DUAL;

SELECT SYSDATE INTO V_FECHA FROM DUAL;

INSERT INTO REG_TBLTITULO (ID_REG, ACCION, FECHA, USUARIO) VALUES ( ' I- ' | | : NEW.TIT_ID_TIT, 'SE HA

INSERTADO ' || : NEW.TIT_TIT, V_FECHA , V_USERNAME);

END;

INSERT INTO TBL_TIT (TIT_ID_TIT, TIT_TIT) VALUES (111, 'INGENIERIA DE SISTEMAS');

INSERT INTO TBL_TIT (TIT_ID_TIT, TIT_TIT) VALUES (1, 'INGENIERIA DE SISTEMAS');


SELECT * FROM REG_TBLTITULO;
Trigger 2: Crear un registro en una tabla de verificación (LOG_ESTU) que cada vez que se realice una inserción en la tabla estudiantes

(TBL_EST) indique el nuevo nombre registrado, el usuario que lo hizo y la fecha

Se crea la tabla que guarde la información de log con su respectiva secuencia:

CREATE TABLE log_estu (

EST_ID VARCHAR2(15),

EST_P_OLDNOM VARCHAR2(30),

EST_P_NEWNOM VARCHAR2(30),

EST_SUCESO VARCHAR2(80),

EST_USUARIO VARCHAR2(50),

LOG_DATE DATE,

CONSTRAINT log_estu_pk PRIMARY KEY (EST_ID_EST)

);

CREATE SEQUENCE log_estu_seq;

Ahora se crea el disparador para que al insertar un dato nuevo en la tabla estudiantes (TBL_EST) se inserte en la tabla creada

(LOG_ESTU) un log indicando el nuevo nombre, el usuario que realizó la inserción y la fecha de ejecución:

create or replace trigger "TBL_EST_T1"

AFTER
insert on "TBL_EST"

for each row

DECLARE

V_USERNAME VARCHAR2(50);

V_FECHA DATE;

BEGIN

SELECT USER INTO V_USERNAME FROM DUAL;

SELECT SYSDATE INTO V_FECHA FROM DUAL;

INSERT INTO LOG_ESTU (EST_ID, EST_P_OLDNOM, EST_P_NEWNOM, EST_SUCESO, EST_USUARIO, LOG_DATE)

VALUES (: NEW.EST_ID_EST, : OLD.EST_P_NOM, : NEW.EST_P_NOM,'SE HA INSERTADO ' || : NEW.EST_P_NOM,

V_USERNAME, V_FECHA);

end;

Ahora se realiza una inserción en la tabla estudiantes (TBL_EST) como se muestra a continuación:

INSERT ALL

INTO TBL_EST (EST_ID_EST, EST_P_NOM, EST_S_NOM, EST_P_APE, EST_S_APE, EST_COD_NAL, EST_DIR,

EST_CIU, EST_TEL, EST_ID_PROG, EST_ID_DPTO, EST_SEXO, EST_CORREO, EST_ID_SEM, EST_ID_ASIG, EST_ID_TIT,

TBL_DPTO_DPTO_ID_DPTO, TBL_SEM_SEM_ID_SEM, TBL_OF_OF_ID_OF, TBL_TIT_TIT_ID_TIT,


TBL_PROG_PROG_ID_PROG) VALUES (7777777,'Carla', 'Liliana', 'Perez', 'Perea', 145, 'Cra 12 # 20 - 16', 'Bogotá', '3657412', 0001,

0003, 'Femenino', 'clpp@gmail.com', 1, 90001, 0001, 0003, 1, 0001, 0001, 0001)

SELECT * FROM dual

Por último, se verifica la tabla log para ver como muestra el nuevo nombre, el usuario que lo creo y la fecha de creación

Trigger 3: Crear un registro en una tabla de verificación (LOG_EST) que cada vez que se realice una actualización al campo de nombre

en la tabla estudiantes (TBL_EST) indique el nombre viejo, el nuevo nombre registrado, el usuario que lo hizo y la fecha

Se crea la tabla que guarde la información de log con su respectiva secuencia:

CREATE TABLE "LOG_EST"

( "EST_ID" VARCHAR2(15),

"EST_P_OLDNOM" VARCHAR2(30),

"EST_P_NEWNOM" VARCHAR2(30),
"EST_SUCESO" VARCHAR2(80),

"EST_USUARIO" VARCHAR2(50),

"LOG_DATE" DATE,

CONSTRAINT "LOG_EST_PK" PRIMARY KEY ("EST_ID")

);

CREATE SEQUENCE log_est_seq;

Ahora se crea el disparador para que al actualizar el campo nombre en la tabla estudiantes (TBL_EST) se inserte en la tabla creada

(LOG_EST) un log indicando el nombre antiguo, el nuevo nombre, el usuario que realizó la inserción y la fecha de ejecución:

create or replace trigger "EST_TGR"

AFTER

update of "EST_P_NOM" on "TBL_EST"

for each row

DECLARE

V_USERNAME VARCHAR2(50);

V_FECHA DATE;

BEGIN

SELECT USER INTO V_USERNAME FROM DUAL;


SELECT SYSDATE INTO V_FECHA FROM DUAL;

INSERT INTO LOG_EST (EST_ID, EST_P_OLDNOM, EST_P_NEWNOM, EST_SUCESO, EST_USUARIO, LOG_DATE)

VALUES (: NEW.EST_ID_EST, : old.EST_P_NOM, : NEW.EST_P_NOM,'SE HA INSERTADO ' || : NEW.EST_P_NOM,

V_USERNAME, V_FECHA);

end;

Ahora se realiza una actualización en el campo nombre de la tabla estudiantes (TBL_EST) como se muestra a continuación:

UPDATE TBL_EST SET EST_P_NOM ='COCO' WHERE EST_ID_EST = 7777777;


Conclusiones

 Se implementan y se ejecutan consultas en las diferentes conbinaciones de INNER JOIN.

 Se realizan consultas con las sentencias AVG, MIN, MAX, y SUM.


Bibliografía

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=321
8178&tm=1531497265422
Piñeiro, Gómez, José Manuel. Manual gestión de bases de datos: formación para el empleo,
Editorial CEP, S.L., 2011. ProQuest Ebook Central, recuperado de Piñeiro, Gómez, José
Manuel. Manual gestión de bases de datos: formación para el empleo, Editorial CEP,
S.L., 2011. ProQuest Ebook Central,
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/detail.action?docID=3214275.

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=322
9065&tm=1531497705957

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=4184
070&tm=1531496292249

Potrebbero piacerti anche