domingo, 22 de junio de 2014

Actividad 1: Evaluacion exploratoria de conocimientos de bases de datos.

            En esta primera entrada se desarrollara el modelado, construcción y la manipulación de una base de datos, la cual está basada en una de las actividades realizadas por la unidad de Control de Estudios de la facultad de ciencias de la UCV, la cual maneja una serie de datos que permiten llevar un control de estudiantes de dicha facultad, en esta actividad en particular construiremos una base de datos que reflejara la información de un documento llamado "Kardex" donde se almacena de manera organizada información acerca de las materias cursadas por un alumno en los distintos periodos académicos, notas definitivas, cantidad de créditos, sección, así como aspectos que ayudan a medir el desempeño del alumno tales como la eficiencia, el promedio general y el promedio ponderado.

             El objetivo que se busca alcanzar con la realización de esta actividad es el de reflejar la información estudiantil del Kardex de forma automatizada a partir de una base de datos en 3FN (tercera forma normal).



  •            En primer lugar se realizara el  Modelo de base de datos  (esquema relacional, es decir un diagrama relacional).





  •          El segundo paso será la Creación De La Base De Datos (DDL). En postgres, todas las tablas y relaciones creadas en el paso uno (01), deben ser implementadas.


         Por ejemplo la tabla materia se creara de la siguiente manera:

CREATE TYPE tipo_materia AS ENUM ('obligatoria','electiva','complementaria','laboratorio');
CREATE TABLE materias (
 id_materia int PRIMARY KEY NOT NULL,
 nombre VARCHAR(30),
 codigo VARCHAR(30),
 creditos INT,
 tipo_materia tipo_materia
 );

          Se puede apreciar que previamente se crea un tipo de dato para validar que al momento de insertar los registros en la tabla "materias" el tipo de materia solo pueda ser:
     - obligatoria,
     - electiva,
     - complementaria,
     - laboratorio.


  •          El tercer paso será la Manipulación de bases de datos, donde se debe generar todos los INSERT de cada uno de mis registros del Kardex.


        Por ejemplo los registros tabla materia se insertaran de la siguiente manera:

INSERT INTO materias VALUES(1,'MATEMATICAS DISCRETAS I','6106',4,'obligatoria');
INSERT INTO materias VALUES(2,'ALGORITMO','8542',6,'obligatoria');
INSERT INTO materias VALUES(3,'MATEMATICAS I','6454',4,'obligatoria');
...

  •         El ultimo paso sera el de realizar todos los querys tanto para el listado de todas las materias por cada semestre cursado,  así como también los querys que generen cada una de las estadísticas que este contiene: Eficiencia, promedio, promedio ponderado, UC inscritas, etc...


         Por ejemplo para el calculo de los Créditos Aprobados realice la siguiente vista:

create or replace view v_creditos as
select sum(m.creditos)
from materias m, kardex k
where (k.id_materia=m.id_materia) and k.nota>9;

         y para calcular la eficiencia realice un procedimiento:
CREATE OR REPLACE FUNCTION calcular_eficiencia() RETURNS float AS $$
DECLARE
  curse int; vi int; total float; porcentaje float;
BEGIN
  SELECT count(id_kardex)INTO vi FROM kardex;
  SELECT count(id_kardex)INTO curse FROM kardex WHERE nota>9;
  total=curse*100/vi;
  porcentaje=total/100;
  RETURN(porcentaje);
END;
$$ LANGUAGE plpgsql;


          Finalmente para consultar el script donde se encuentran todas las tablas y relaciones, las consultas utilizadas para la creación de la base de datos y el backup de la base de datos (en Postgres), pueden acceder al siguiente enlace

       Como entregable adicional, se pidió elaborar un registro que señale el  tiempo de dedicación por actividades realizadas durante la actividad:

Actividad Realizada

Tiempo total
Analisis y Modelado de base de datos


1h

Construir DDL
45min

DML (Insert)

2h
DML (Query)
2h

Entrada en el Blog
2h


1 comentario:

  1. Buen trabajo. Solo Falta el informe técnico. Revisa este enlace http://bi-experience-blog.blogspot.com/2014/06/3fn-from-scratch.html.

    ResponderEliminar