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
|