# Ejercicio práctico de la aplicación Media Técnica App

## INTRODUCCIÓN

Hemos llegado al final de los módulos del módulo de base de datos, estas han entregado de manera muy puntual y practica muchos temas que se requieren en el día a día del desarrollo y estructuración de la capa de datos de un software. Por ello, es imprescindible que el lector no pare su aprendizaje en este punto, por el contrario, continúe profundizando en los diferentes temas vistos y aborde otras temáticas que fortalezcan los conceptos teóricos y prácticos en esta área.

Este módulo final tiene como propósito desarrollar un ejemplo práctico de una base de datos para un aplicativo que requiere almacenar los datos de una problemática en particular. El aplicativo que se ha venido estructurando desde los diferentes módulos es **Media Técnica App**; este aplicativo contiene diferentes módulos para la administración de la información que se maneja al interior de la coordinación del programa de media técnica.

El diseño estructural y practico del ejercicio que se trabajará en este módulo tendrá gran parte de las etapas que se han venido trabajando en todos los módulos de base de datos. El repositorio donde se almacena el ejercicio de este módulo en el siguiente enlace <https://github.com/devoscarmesa/base_datos_semana_8>.&#x20;

## Universo del discurso Media Técnica App

El Ministerio de Educación en el Artículo 33 de la Ley 115 de 1994 pide que la educación media técnica tenga como objetivos: la capacitación básica inicial para el trabajo; la preparación para vincularse al sector productivo y a las posibilidades de formación que éste ofrece, y la formación adecuada a los objetivos de educación media académica, que permita al educando el ingreso a la educación superior.

El Politécnico Colombiano Jaime Isaza Cadavid es una institución de carácter educativo, que dentro de sus programas de formación tiene una media técnica en Programación de Sistemas de Información, dicha media técnica esta dentro de la Alianza de Futuro Digital, la cual cuenta con un conglomerado de instituciones educativas del área metropolitana que hacen parte de este proceso y que durante varios años a contado con varios procesos de éxito que han logrado integrase a un proceso propedéutico para completar su proceso en las modalidades de técnica, tecnología e ingeniería.

A través de los años, esta media técnica ha visto la necesidad de contar con un sistema de almacenamiento que le permita guardar información de los diferentes procesos que se manejan al interior del programa. Como primera medida se requiere almacenar la información de las Instituciones Educativas que se encuentran adscritas al programa; de estas es importante almacenar: nombre de la institución, dirección o ubicación, foto de la institución, una descripción del colegio, telefono de la institución, correo institucional de contacto, nombre del docente encargado y pagina web.

Del programa también es relevante, almacenar la información de los docentes de la media técnica, los cuales se encuentran en constante rotación (sea por que renuncian a su labor o porque son removidos del programa). De los docentes es importante saber en todo momento: documento de identificación, nombres, apellidos, título, dirección de residencia, telefono celular, correo y un pdf con la hoja de vida.

También es indispensable para la coordinación almacenar información de los módulos que se dictan a en las instituciones educativas. Los módulos que se imparten son: &#x20;

* Construcción de Elementos de Software 1 (CES1)
* Taller de base de datos (BD)
* Interpretación de Requisitos (IR)
* Construcción de Elementos de Software Web 1 (CESW1)

Tal como se denota en la lista anterior, son 4 módulos que se imparten desde la media técnica, estos tienen un identificador o código que permiten abreviarlo y relacionarlos de manera más simple. Adicionalmente, de los módulos se debe almacenar el título del módulo y una descripción de este.

Por otro lado, se debe realizar el almacenamiento de la información de los estudiantes que perecen a las instituciones educativas y hacen parte del proceso de la media técnica. De los estudiantes es pertinente conocer la siguiente información: número de expediente, nombre completo, fecha de nacimiento (edad), documento de identificación, tipo de documento, telefono celular, correo electrónico, genero, colegio al que pertenece y el estado (el estudiante puede estar activo, inactivo o retirado). También es importante que él estudiante pueda ser vinculado a un grupo que se cree dentro de la institución (se debe tener en cuenta que un estudiante al pasar de grado, debe almacenar su información histórica).

Los docentes que se contratan para el proceso de media técnica (no es necesario tener el proceso de contratación almacenado), deben ser vinculados a los diferentes módulos que se imparte en cada una de las instituciones educativas, de esta manera se puede establecer que módulo dicta cada uno de los docentes que se contrató para el proceso en las instituciones educativas. Se debe tener en cuenta que un docente vinculado a un curso puede ser desvinculado o este puede renunciar, pero se debe guardar el seguimiento de asistencia que se pudo sacar durante su permanencia.

Una vez se tiene claridad de los módulos que imparte cada docente en las instituciones educativas, se debe almacenar la asistencia de cada uno de los estudiantes en una sesión que dicta el docente en una fecha programada.

## ![](file:///C:/Users/W1803/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)Modelo Relacional Media Técnica App

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBIb5plZR0KGi9Kw8J%2F-MMBOZ-ztJ-VgnUTY9a0%2Fimage.png?alt=media\&token=58d5d8f6-4f1c-4419-b98a-146062cc83c5)

<https://github.com/devoscarmesa/base_datos_semana_8/blob/main/modelo_relacional.svg>

### **Explicación de las tablas**

{% tabs %}
{% tab title="tipo\_actores" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBSSMnAsrbMORZfzMy%2Fimage.png?alt=media\&token=12c0b166-fae7-4644-b598-ae33875aebc8)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBSKVH6gHe21jHTaDu%2Fimage.png?alt=media\&token=9deb9187-f67d-44d7-8cd5-15ecc31903a0)

Tabla de los actores que interactúan dentro del aplicativo.
{% endtab %}

{% tab title="estado\_actores" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBSkbe2riCoV-nzqES%2Fimage.png?alt=media\&token=3e6f841e-1491-41f6-8d0c-78a03ef0e5b4)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBSwF9IXAbB5KccdKI%2Fimage.png?alt=media\&token=b71832d6-9b42-4159-bbd6-8d5cf60c56fc)

Tabla de los estados que puede asumir un actor dentro del aplicativo.
{% endtab %}

{% tab title="tipo\_documento" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBT2Yf0PmJOT4f9hCh%2Fimage.png?alt=media\&token=afe7c633-6a06-4584-9320-f83f9d0eb7f5)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBTETc1O1ttcrxkv6W%2Fimage.png?alt=media\&token=2a93df2f-b582-4025-93e3-74fee2dd1347)

Tabla que almacena los tipos de documentos que se le pueden asignar a los actores dentro del sistema.
{% endtab %}

{% tab title="modulos" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBTOS-3d6HH-65Eup5%2Fimage.png?alt=media\&token=04533e10-53a0-4bb8-9d1b-b175eb74fb7e)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBTQSxn4JO8KdD5PXg%2Fimage.png?alt=media\&token=3bc318da-b8ea-4bed-ae8e-2b67c4acf9ba)

Tabla para almacenar los módulos que se dictan en el programa de media técnica y deben ser asignados a los docentes y a los estudiantes que se les imparte estos módulos.
{% endtab %}

{% tab title="instituciones\_educativas" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBTXMX__Ek9EignhsD%2Fimage.png?alt=media\&token=5139552d-30f6-466b-9e07-d6d7533b3f78)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBQPxXlRmhGO6BRaPh%2F-MMBT_JBhKpm0L7DHfgN%2Fimage.png?alt=media\&token=6028297f-65f5-4ed9-812a-05d4ac29d180)

Tabla para almacenar la información de las instituciones educativas adscritas al programa de media técnica y brindan este programa a sus estudiantes.
{% endtab %}

{% tab title="actores" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBhPz7_qlT79b2HO7_%2Fimage.png?alt=media\&token=16badcf1-52f4-4a0d-92b4-abbb706bd07c)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBhRm9NTlgJCwOxvp2%2Fimage.png?alt=media\&token=47160206-42e7-40cf-88c2-e8c88753a2be)

Tabla para almacenar los datos de los actores que intervienen en el sistema, tal como docentes, estudiantes, coordinadores o asesores. Algunos aspectos a resaltar en esta tabla son:

* Como son usuarios muy diversos, no todos los campos aplicaran en todos los casos, tal como lo es el campo institución\_id, este campo solo aplica para estudiantes y lo mismo puede pasar en el caso de los otros usuarios.
* La contraseña que se codifica en esta tabla, almacena una cadena de texto que aplica el algoritmo de encriptación SHA1 (Se explica más adelante).
* En esta tabla y en otras, existen los campos fecha\_creacion y fecha\_actualizacion, los cuales se conocen como campos de auditoria y permiten llevar un control exacto de la fecha de cuando se crea o actualiza un registro en la tabla. Para este fin se hace del tipo de campo **timestamp**, que permite controlar este tipo acciones en las tablas.&#x20;
* El campo genero se maneja mediante una enumeración, este es un buen caso en el cual es recomendable emplear este tipo de campo, ya que el genero que se maneja solo son hombre y mujer, por lo cual no hay necesidad de crear otra tabla para administrar esta información.
  {% endtab %}

{% tab title="grupos" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBhtCHxq5ZL8pbVYxK%2Fimage.png?alt=media\&token=94e10527-f9a2-411a-8159-1426297b80df)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBrSAv5Gefyx1xI_q5%2Fimage.png?alt=media\&token=94ad6217-81c7-4a2e-98d8-6da467e4b82f)

Tabla para almacenar los datos correspondientes a los grupos de las instituciones educativas y se matriculan en la media técnica. Se permite asociar un carácter alfanumérico que se almacena en el campo letra, esto se debe a que los grupos en las instituciones se les asocia este identificador, pero no es obligatorio. Dentro de la estructura se valida que la combinación de institución educativa, grado y año sea única, puesto que no tiene sentido que un colegio tenga un grupo del mismo grado dos veces en un mismo año, esto no es posible, por ello se crea un índice de tipo **unique** que agrupa estos tres campos. &#x20;
{% endtab %}

{% tab title="integrantes\_grupos" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBrh_qpaRubVVcjE-t%2Fimage.png?alt=media\&token=1c90c00d-353b-4f61-acaa-9e0713597c6a)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBrjtYCYmDC45D-0Ap%2Fimage.png?alt=media\&token=15d11f56-b743-4b7b-b0f5-7e14f651558f)

Tabla para almacenar la asociación de entre el estudiante y el grupo, de esta manera se puede identificar cuales son los integrantes de cada grupo. Para esta tabla se debe crear una restricción **unique** entre un estudiante y un grupo, con la finalidad de evitar que en un grupo se puede matricular el mismo estudiante mas de una vez.
{% endtab %}

{% tab title="clases" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBs8GItoX9n_lIGBxP%2Fimage.png?alt=media\&token=7837d795-0311-4eb3-a62b-9c274dd3d824)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBs9cCuatn-yk5bFjW%2Fimage.png?alt=media\&token=137f5b01-04b6-4d34-8ca4-d49036171a42)

Tabla para almacenar la relación entre el módulo, el docente y el grupo de la institución educativa donde se va impartir la formación. Para el caso de esta tabla, también se establece un índice **unique** que no permite que un docente dicte mas de una vez el mismo módulo en una institución educativa por regla de negocio.
{% endtab %}

{% tab title="sesiones\_clases" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBsI1Ly-upveyOwevY%2Fimage.png?alt=media\&token=9c52271d-d46f-44c9-bb42-575c7f4331d2)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBsJ2RviihbCmzrwzr%2Fimage.png?alt=media\&token=476da683-a2c8-4daf-b479-dce6d3d98ad6)

Tabla para almacenar y registrar cada una de las sesiones impartidas por parte de los docentes. En esta tabla se crea un índice de tipo **unique** con los campos clase\_id y fecha\_sesion, con el fin de evitar que para una clase un docente registre mas una sesión en una misma fecha.
{% endtab %}

{% tab title="asistencias\_sesiones" %}

### Tabla

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBsRQ9kYcMClSZCGGV%2Fimage.png?alt=media\&token=c73aacb8-4407-4721-b6ea-fa07be845fce)

### Interpretación para el almacenamiento

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBTgjgpmjFAGmFfxhp%2F-MMBsSKr0wS46lwxB3Pn%2Fimage.png?alt=media\&token=147b884d-f3aa-42e3-8f64-5fc5a13d9218)

Tabla para almacenar y registrar la asistencia de los estudiantes a una sesión programada por parte de un docente. Esta tabla presenta las siguientes particularidades:

* Cuenta con un índice de tipo unique para evitar que un integrante de un grupo (estudiante) se le registre mas de una vez la asistencia a una sesión de clase programada por el docente.
* El campo asiste recibe un numero entero, donde 0 indica que el estudiante no asistió y 1 indica que el estudiante asistió a la sesión de clase.
* La tabla no se relaciona directamente con la tabla actor, puesto que la asistencia se le debe registrar a un estudiante inscrito en un grupo, por lo cual se genera la relación con la tabla integrantes\_grupos.&#x20;
  {% endtab %}
  {% endtabs %}

## Script de base de datos

El script SQL de base de datos es el archivo de carga que contiene la definición de todas las estructuras mediante DDL, además los datos de carga inicial, con los que la base de datos queda poblada en sus tablas principales o tablas maestras mediante DML.

El script de base de datos del ejercicio que se está trabajando en este módulo queda publicado en el siguiente enlace <https://github.com/devoscarmesa/base_datos_semana_8/blob/main/media_tecnica_app.sql>.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBsrOqm0e2_fpmYvaP%2Fimage.png?alt=media\&token=62aa6433-8a87-4f81-924a-ded0ce89161b)

## Algoritmo de encriptación SHA1

El **hash SHA1** es un algoritmo de generación de firmas. Un hash es una cadena de letras y números que resulta del cálculo sobre una cadena de origen. La idea es que el algoritmo provea distintas firmas (o hashes SHA) para distintos orígenes. El cálculo es irreversible y de una sola vía, es decir que a partir de un hash es muy difícil calcular la cadena original que lo formó a través del algoritmo SHA.

Los **hashes SHA1** se utilizan para almacenar las firmas de las contraseñas. De este modo, en vez de guardar las contraseñas de los usuarios, almacenamos los hashes de las contraseñas, evitando que la contraseña viaje por la red. A partir del hash no se puede calcular la contraseña original. También se utiliza SHA para firmar documentos. El algoritmo SHA1 ha sido puesto en duda ya que se pudieron calcular colisiones de firmas, o sea, hashes iguales para distintas cadenas de entrada. Sin embargo, SHA se sigue considerando seguro para la mayoría de las aplicaciones.

La función sha1() de MySQL calcula una suma de comprobación SHA-1 de 160 bits para una cadena.

La función devuelve un valor como una cadena binaria de 40 dígitos hexadecimales. Si la cadena proporcionada como argumento es NULL, la función devuelve NULL.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBsuRcE3Ekz9Y77Uc-%2Fimage.png?alt=media\&token=91a0aa21-4a5f-4956-a14b-1499bd438d45)

En el ejemplo anterior el sha1 de la cadena **politecnico** es **3e478ac6f2b51f65f1a45bbc6a8d51b2d5c94ad8.**

## Diccionario de datos

El diccionario de datos es un listado organizado de todos los datos que pertenecen a un sistema.

El objetivo de un diccionario de datos es dar precisión sobre los datos que se manejan en un sistema, evitando así malas interpretaciones o ambigüedades.

Define con precisión los datos de entrada, salida, componentes de almacenes, flujos, detalles de las relaciones entre almacenes, etc.

Los diccionarios de datos son buenos complementos a los diagramas de flujo de datos, los diagramas entidad relación, etc.

### **Generar diccionario de datos con PhpMyAdmin**

A continuación, se generará el diccionario de datos de la base de datos media\_tecnica\_app, mediante PhpMyAdmin, vemos los pasos:

**1.**  Ingrese a la base de datos de la cual desea generar el diccionario de datos.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBt3orUbA9U3ycDXo3%2Fimage.png?alt=media\&token=eb0cff34-dfbb-4348-9441-36daf0d619d6)

**2.**    Elegir la opción **Diccionario de datos**.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBteglFTLZThivFnqz%2Fimage.png?alt=media\&token=2c303526-1bc9-4fde-97fd-3605f290cd1b)

**3.**   Una vez allí veremos el diccionario de datos correspondiente a la base de datos sobre la cual estamos ubicado.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBtjl4VPsHk2k3Dw3U%2Fimage.png?alt=media\&token=ccc1a6d0-5b2e-414f-bd3c-e3e50b7413bd)

## **Diccionario de datos Media Técnica App**

A continuación, se anexa el diccionario de datos que se genero desde PhpMyAdmin, tenga en cuenta que lo ideal es que este diccionario se genere una vez la base de datos ya se encuentra en su ultima versión y cuenta con todos los ajustes necesarios.

### actores

| **Columna**                  | **Tipo**                | **Nulo** | **Predeterminado**   | **Enlaces a**                   | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | ----------------------- | -------- | -------------------- | ------------------------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(5)                  | No       |                      |                                 |                 |                       |
| **documento**                | varchar(20)             | No       |                      |                                 |                 |                       |
| **tipo\_documento**          | varchar(3)              | Sí       | *NULL*               | tipo\_documento -> codigo       |                 |                       |
| **nombres**                  | varchar(255)            | No       |                      |                                 |                 |                       |
| **apellidos**                | varchar(255)            | No       |                      |                                 |                 |                       |
| **contrasena**               | varchar(80)             | Sí       | *NULL*               |                                 |                 |                       |
| **correo**                   | varchar(100)            | Sí       | *NULL*               |                                 |                 |                       |
| **telefono\_celular**        | varchar(30)             | Sí       | *NULL*               |                                 |                 |                       |
| **numero\_expediente**       | varchar(255)            | Sí       | *NULL*               |                                 |                 |                       |
| **genero**                   | enum('hombre', 'mujer') | No       |                      |                                 |                 |                       |
| **fecha\_nacimiento**        | date                    | Sí       | *NULL*               |                                 |                 |                       |
| **estado\_actor\_id**        | int(5)                  | No       | 1                    | estado\_actores -> id           |                 |                       |
| **institucion\_id**          | int(5)                  | Sí       | *NULL*               | instituciones\_educativas -> id |                 |                       |
| **tipo\_actor\_id**          | int(5)                  | Sí       | 1                    | tipo\_actores -> id             |                 |                       |
| **fecha\_creacion**          | timestamp               | Sí       | current\_timestamp() |                                 |                 |                       |
| **fecha\_actualizacion**     | timestamp               | Sí       | *NULL*               |                                 |                 |                       |

#### **Índices**

| **Nombre de la clave**          | **Tipo** | **Único** | **Empaquetado** | **Columna**        | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| ------------------------------- | -------- | --------- | --------------- | ------------------ | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**                     | BTREE    | Sí        | No              | id                 | 6                | A                | No       |                |
| **uq\_documento**               | BTREE    | Sí        | No              | documento          | 6                | A                | No       |                |
| **uq\_numero\_expediente**      | BTREE    | Sí        | No              | numero\_expediente | 6                | A                | Sí       |                |
| **fk\_tipo\_actor**             | BTREE    | No        | No              | tipo\_actor\_id    | 6                | A                | Sí       |                |
| **fk\_institucion\_estudiante** | BTREE    | No        | No              | institucion\_id    | 6                | A                | Sí       |                |
| **fk\_estado\_actor**           | BTREE    | No        | No              | estado\_actor\_id  | 2                | A                | No       |                |
| **fk\_tipo\_documento**         | BTREE    | No        | No              | tipo\_documento    | 6                | A                | Sí       |                |

### asistencias\_sesiones

| **Columna**                  | **Tipo**  | **Nulo** | **Predeterminado**   | **Enlaces a**             | **Comentarios**                                        | **Media (MIME) type** |
| ---------------------------- | --------- | -------- | -------------------- | ------------------------- | ------------------------------------------------------ | --------------------- |
| **id&#x20;*****(Primaria)*** | int(5)    | No       |                      |                           |                                                        |                       |
| **sesion\_clase\_id**        | int(5)    | Sí       | *NULL*               | sesiones\_clases -> id    |                                                        |                       |
| **integrante\_grupo\_id**    | int(5)    | Sí       | *NULL*               | integrantes\_grupos -> id |                                                        |                       |
| **asiste**                   | int(1)    | Sí       | 0                    |                           | Permite determina si el estudiante asiste o no a clase |                       |
| **observaciones**            | text      | Sí       | *NULL*               |                           |                                                        |                       |
| **fecha\_creacion**          | timestamp | Sí       | current\_timestamp() |                           |                                                        |                       |

#### **Índices**

| **Nombre de la clave**     | **Tipo** | **Único** | **Empaquetado** | **Columna**           | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario**                                      |
| -------------------------- | -------- | --------- | --------------- | --------------------- | ---------------- | ---------------- | -------- | --------------------------------------------------- |
| **PRIMARY**                | BTREE    | Sí        | No              | id                    | 8                | A                | No       |                                                     |
| **uq\_sesion\_integrante** | BTREE    | Sí        | No              | sesion\_clase\_id     | 8                | A                | Sí       | Un integrante solo puede asistir una vez por sesion |
| integrante\_grupo\_id      | 8        | A         | Sí              |                       |                  |                  |          |                                                     |
| **fk\_integrante\_grupo**  | BTREE    | No        | No              | integrante\_grupo\_id | 8                | A                | Sí       |                                                     |

### clases

| **Columna**                  | **Tipo**  | **Nulo** | **Predeterminado**   | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | --------- | -------- | -------------------- | ------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(5)    | No       |                      |               |                 |                       |
| **grupo\_id**                | int(5)    | Sí       | *NULL*               | grupos -> id  |                 |                       |
| **modulo\_id**               | int(5)    | Sí       | *NULL*               | modulos -> id |                 |                       |
| **docente\_id**              | int(5)    | Sí       | *NULL*               | actores -> id |                 |                       |
| **fecha\_creacion**          | timestamp | Sí       | current\_timestamp() |               |                 |                       |
| **fecha\_actualizacion**     | timestamp | Sí       | *NULL*               |               |                 |                       |

#### **Índices**

| **Nombre de la clave**  | **Tipo** | **Único** | **Empaquetado** | **Columna** | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| ----------------------- | -------- | --------- | --------------- | ----------- | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**             | BTREE    | Sí        | No              | id          | 4                | A                | No       |                |
| **fk\_clases\_modulo**  | BTREE    | No        | No              | modulo\_id  | 4                | A                | Sí       |                |
| **fk\_clases\_docente** | BTREE    | No        | No              | docente\_id | 4                | A                | Sí       |                |
| **uq\_clase**           | BTREE    | No        | No              | grupo\_id   | 4                | A                | Sí       |                |
| modulo\_id              | 4        | A         | Sí              |             |                  |                  |          |                |
| docente\_id             | 4        | A         | Sí              |             |                  |                  |          |                |

### estado\_actores

| **Columna**                  | **Tipo**    | **Nulo** | **Predeterminado** | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | ----------- | -------- | ------------------ | ------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(11)     | No       |                    |               |                 |                       |
| **estado**                   | varchar(30) | Sí       | *NULL*             |               |                 |                       |

#### **Índices**

| **Nombre de la clave** | **Tipo** | **Único** | **Empaquetado** | **Columna** | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| ---------------------- | -------- | --------- | --------------- | ----------- | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**            | BTREE    | Sí        | No              | id          | 2                | A                | No       |                |

### grupos

| **Columna**                  | **Tipo**    | **Nulo** | **Predeterminado** | **Enlaces a**                   | **Comentarios**  | **Media (MIME) type** |
| ---------------------------- | ----------- | -------- | ------------------ | ------------------------------- | ---------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(5)      | No       |                    |                                 |                  |                       |
| **institucion\_id**          | int(5)      | No       |                    | instituciones\_educativas -> id |                  |                       |
| **grado**                    | int(2)      | No       |                    |                                 |                  |                       |
| **letra**                    | char(1)     | Sí       | *NULL*             |                                 |                  |                       |
| **a\_formacion**             | int(4)      | Sí       | *NULL*             |                                 | Año de formación |                       |
| **descripcion**              | varchar(30) | Sí       | *NULL*             |                                 |                  |                       |

#### **Índices**

| **Nombre de la clave** | **Tipo** | **Único** | **Empaquetado** | **Columna**     | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario**                                                                                                                                                                    |
| ---------------------- | -------- | --------- | --------------- | --------------- | ---------------- | ---------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **PRIMARY**            | BTREE    | Sí        | No              | id              | 2                | A                | No       |                                                                                                                                                                                   |
| **uq\_ie\_grado**      | BTREE    | Sí        | No              | institucion\_id | 2                | A                | No       | Un grado, de una institucion educativa solo puede estar presente una sola vez en un año 0 Un grado, de una institucion educativa solo puede estar presente una sola vez en un año |
| grado                  | 2        | A         | No              |                 |                  |                  |          |                                                                                                                                                                                   |
| a\_formacion           | 2        | A         | Sí              |                 |                  |                  |          |                                                                                                                                                                                   |

### instituciones\_educativas

| **Columna**                  | **Tipo**     | **Nulo** | **Predeterminado** | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | ------------ | -------- | ------------------ | ------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(11)      | No       |                    |               |                 |                       |
| **nombre\_ie**               | varchar(300) | No       |                    |               |                 |                       |
| **docente\_encargado\_mt**   | varchar(300) | No       |                    |               |                 |                       |
| **pagina\_web**              | varchar(100) | Sí       | *NULL*             |               |                 |                       |
| **direccion**                | varchar(100) | No       |                    |               |                 |                       |
| **foto\_ie**                 | varchar(100) | Sí       | *NULL*             |               |                 |                       |
| **descripcion\_ie**          | text         | Sí       | *NULL*             |               |                 |                       |
| **telefono\_institucional**  | varchar(20)  | Sí       | *NULL*             |               |                 |                       |
| **correo\_institucional**    | varchar(100) | Sí       | *NULL*             |               |                 |                       |

#### **Índices**

| **Nombre de la clave** | **Tipo** | **Único** | **Empaquetado** | **Columna** | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| ---------------------- | -------- | --------- | --------------- | ----------- | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**            | BTREE    | Sí        | No              | id          | 2                | A                | No       |                |

### integrantes\_grupos

| **Columna**                  | **Tipo** | **Nulo** | **Predeterminado** | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | -------- | -------- | ------------------ | ------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(5)   | No       |                    |               |                 |                       |
| **estudiante\_id**           | int(5)   | No       |                    | actores -> id |                 |                       |
| **grupo\_id**                | int(5)   | No       |                    | grupos -> id  |                 |                       |
| **observaciones**            | text     | Sí       | *NULL*             |               |                 |                       |

#### **Índices**

| **Nombre de la clave**     | **Tipo** | **Único** | **Empaquetado** | **Columna**    | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| -------------------------- | -------- | --------- | --------------- | -------------- | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**                | BTREE    | Sí        | No              | id             | 4                | A                | No       |                |
| **uq\_grupo\_estudiante**  | BTREE    | Sí        | No              | estudiante\_id | 4                | A                | No       |                |
| grupo\_id                  | 4        | A         | No              |                |                  |                  |          |                |
| **fk\_grupo\_integrantes** | BTREE    | No        | No              | grupo\_id      | 4                | A                | No       |                |

### modulos

| **Columna**                  | **Tipo**     | **Nulo** | **Predeterminado** | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | ------------ | -------- | ------------------ | ------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(11)      | No       |                    |               |                 |                       |
| **modulo**                   | varchar(255) | Sí       | *NULL*             |               |                 |                       |
| **mod**                      | varchar(10)  | Sí       | *NULL*             |               |                 |                       |

#### **Índices**

| **Nombre de la clave** | **Tipo** | **Único** | **Empaquetado** | **Columna** | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| ---------------------- | -------- | --------- | --------------- | ----------- | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**            | BTREE    | Sí        | No              | id          | 4                | A                | No       |                |
| **uq\_mod**            | BTREE    | Sí        | No              | mod         | 4                | A                | Sí       |                |

### sesiones\_clases

| **Columna**                  | **Tipo** | **Nulo** | **Predeterminado** | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | -------- | -------- | ------------------ | ------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(5)   | No       |                    |               |                 |                       |
| **clase\_id**                | int(5)   | No       |                    | clases -> id  |                 |                       |
| **fecha\_sesion**            | date     | No       |                    |               |                 |                       |
| **observacion**              | text     | Sí       | *NULL*             |               |                 |                       |

#### **Índices**

| **Nombre de la clave**       | **Tipo** | **Único** | **Empaquetado** | **Columna** | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario**                                      |
| ---------------------------- | -------- | --------- | --------------- | ----------- | ---------------- | ---------------- | -------- | --------------------------------------------------- |
| **PRIMARY**                  | BTREE    | Sí        | No              | id          | 4                | A                | No       |                                                     |
| **uq\_sesion\_clase\_fecha** | BTREE    | Sí        | No              | clase\_id   | 4                | A                | No       | La sesión de una clase solo puede ser una por fecha |
| fecha\_sesion                | 4        | A         | No              |             |                  |                  |          |                                                     |

### tipo\_actores

| **Columna**                  | **Tipo**     | **Nulo** | **Predeterminado** | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| ---------------------------- | ------------ | -------- | ------------------ | ------------- | --------------- | --------------------- |
| **id&#x20;*****(Primaria)*** | int(5)       | No       |                    |               |                 |                       |
| **perfil**                   | varchar(100) | Sí       | *NULL*             |               |                 |                       |

#### **Índices**

| **Nombre de la clave** | **Tipo** | **Único** | **Empaquetado** | **Columna** | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| ---------------------- | -------- | --------- | --------------- | ----------- | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**            | BTREE    | Sí        | No              | id          | 4                | A                | No       |                |

### tipo\_documento

| **Columna**                      | **Tipo**     | **Nulo** | **Predeterminado** | **Enlaces a** | **Comentarios** | **Media (MIME) type** |
| -------------------------------- | ------------ | -------- | ------------------ | ------------- | --------------- | --------------------- |
| **codigo&#x20;*****(Primaria)*** | varchar(3)   | No       |                    |               |                 |                       |
| **descripcion**                  | varchar(100) | Sí       | *NULL*             |               |                 |                       |

#### **Índices**

| **Nombre de la clave** | **Tipo** | **Único** | **Empaquetado** | **Columna** | **Cardinalidad** | **Cotejamiento** | **Nulo** | **Comentario** |
| ---------------------- | -------- | --------- | --------------- | ----------- | ---------------- | ---------------- | -------- | -------------- |
| **PRIMARY**            | BTREE    | Sí        | No              | codigo      | 6                | A                | No       |                |

## Creación de base de datos Media Técnica App en Clever Cloud

Como último paso en este ejercicio práctico, será crear paso a paso en Clever Cloud (Plataforma gratuita donde podemos tener desplegadas nuestras bases de datos) la base de datos del ejercicio planteado en este módulo. Veamos:

**1.**    Ingresar a la plataforma mediante el siguiente enlace <https://www.clever-cloud.com/en/> e iremos a la sección de Login.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBuL3HnCKUelqK9tGN%2Fimage.png?alt=media\&token=f136e7a6-a8d9-4556-a0d8-e2e0875a747a)

**2.**  Partiremos del hecho, de contar con una cuenta ya creada. Ingrese sus credenciales o inicie con algún mecanismo que nos facilita el inicio de sesión, tal como GitHub.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBuOz4R5iaBVcrMP2m%2Fimage.png?alt=media\&token=71f93987-798d-44f5-bb3e-62cf08ff9434)

**3.**   Una vez dentro la plataforma, ingrese mediante la siguiente ruta: **Add an organization >> Create… >> an add-on**

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBuW0G1ol4SYSU9pjx%2Fimage.png?alt=media\&token=e4dab20c-f30d-46f3-aede-bc682e347a4c)

**4.**    Una vez allí, seleccionamos la opción de MySQL.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBuiZJyl52an-iOS6G%2Fimage.png?alt=media\&token=e3a85d61-7f1b-4ce2-93b7-061e27050efe)

**5.**    Luego seleccionamos la opción de desarrollo (DEV), que no acarrea ningún costos. Luego vamos a la parte inferior y presionamos sobre el botón **Next**.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBul1hwOU-xR0AWUbl%2Fimage.png?alt=media\&token=80bc1b12-1b66-4591-ae64-5f022daa7337)

**6.** Damos un nombre a la instancia de la base de datos, luego seleccionamos la región y damos clic sobre el botón **Next**.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMButnhkWXhdquXFMWP%2Fimage.png?alt=media\&token=12c37b36-a6c3-4619-8c4c-82eb78d0b3aa)

**7.**   Ya tenemos lista la instancia para correr nuestro script. Vamos a la sección PHPMyAdmin

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBv0OoB_4eqDY5Eqs8%2Fimage.png?alt=media\&token=4314a4ab-fe77-40d3-a3a0-05aef3a0dddc)

**8.**    Damos clic sobre la base de datos que la plataforma nos asigna.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBv1wLcqwqcEeVXPOY%2Fimage.png?alt=media\&token=cdc157de-1461-4daf-a372-655c5f88d0bf)

**9.**    Nos dirigimos a la sección de SQL y copiamos el script de base de datos del ejercicio práctico.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBv39p2Ss5_gFIGJyQ%2Fimage.png?alt=media\&token=c70b2e7f-5d85-401f-bab6-56fd2f790b66)

**10.**  Por último, procedemos a correr el script de base de datos que pegamos en el campo que se nos habilita para ejecutar los comandos SQL y damos clic sobre el botón Go.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBv50n2IqC48FQKoIZ%2Fimage.png?alt=media\&token=3bf5a3e6-2043-49b1-8b63-6031db883dfc)

**11.**  Con este último paso ya tenemos nuestra base de datos, con las estructuras y datos iniciales.

![](https://1776937240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MKm7bZbn0YvvJUjUIMU%2F-MMBsipvFsByIy6Yby8f%2F-MMBv7HJ-dQzHjNKskKx%2Fimage.png?alt=media\&token=ed94df24-50b2-450b-9dcf-f14777d9b45c)

## **Quiero saber más …**

·         <https://www.mysql.com/>

·         <https://www.clever-cloud.com/en/>

·         <https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html>

·         <https://dev.mysql.com/doc/refman/8.0/en/data-dictionary.html>

·         <https://github.com/devoscarmesa/base_datos_semana_8>

## Ejercicios

### Ejercicio 1

El siguiente cuestionario cuenta con preguntas que abarcan todas las temáticas que se vieron durante este módulo de base de datos.

a.    ¿Qué es una Base de datos?

b.    ¿Qué es un SGBD?

c.     ¿Qué es un atributo?

d.    ¿Qué es un Registro?

e.    ¿Qué es una Entidad?

f.     ¿Cuáles son los tipos de relaciones que existen?

g.    ¿Cuáles son Comandos DLL?

h.    ¿Cuáles son los comandos DML?

i.      ¿A qué se refieren las cláusulas?

j.     Nombre tres clausulas

k.    Nombre tres funciones de agregado

l.      ¿Qué es una clave principal?

m.   ¿Qué es una clave candidata o llave foránea?     &#x20;

n.    ¿Qué es un diagrama entidad relación?

### Ejercicio 2

Investigue e indique en que consiste el algoritmo de encriptación MD5

### Ejercicio 3

Asegúrese de encriptar las contraseñas (MD5 o SHA1) de la tabla de usuarios de PPI con la que debe contar el proyecto de PPI (anexe evidencia).

### Ejercicio 4

Genere el diccionario de datos de la base de datos de PPI.

### Ejercicio 5

Despliegue y anexe evidencia de la base de datos del PPI en Clever Cloud
