1 - Introduccion
Bases de Datos SQL
Las Bases de datos SQL, son bases de datos del tipo Relacionales y estructuradas. Su nombre SQL proviene del término (Structured Query Language), en español: Lenguaje de Consulta Estructurado. Se operan a través de SQL, (“sícuel”), un lenguaje derivado del estándar ANSI SQL. El lenguaje con el cual se manipulan se conoce como Transact SQL aunque algunas alternativas comerciales utilizan su propia variante con mínimas diferencias sobre el lenguaje estandarizado ANSI SQL.
Bases de Datos No-SQL
Las bases de datos No-SQL (not only SQL) difieren del modelo estructurado, apoyándose en un sistema de almacenamiento del tipo {clave - valor}. No utilizan el lenguaje SQL para realizar operaciones sobre la información almacenada. Su estructura se basa en el formato de transporte de datos JSON y, además de la categoría clave-valor, el almacenamiento de información se asemeja a bb.dd. documentales, y a las bb.dd. orientadas a grafos. Mongo DB, Cassandra, Cosmos DB y Firestore, son las más conocidas y utilizadas actualmente.
Data Warehouse
Un Data Warehouse es un almacén electrónico donde generalmente una empresa u organización mantiene una gran cantidad de información. Los datos de un data warehouse deben almacenarse de forma segura, fiable, fácil de recuperar y fácil de administrar.
El concepto de data warehouse se originó en 1988 con el trabajo de los investigadores de IBM, Barry Devlin y Paul Murphy aunque el término data warehouse fue acuñado por William H. Inmon, el cual es conocido como el padre de Data Warehousing. Inmon describió un data warehouse como una colección de datos orientada a un tema específico, integrado, variante en el tiempo y no volátil, que soporta el proceso de toma de decisiones.
2 - My Sql
Es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual: Licencia pública general/Licencia comercial por Oracle Corporation y está considerada como la base de datos de código abierto más popular del mundo, y una de las más populares en general junto a Oracle y Microsoft SQL Server, todo para entornos de desarrollo web.
A continuación, se encuentra un link con los instructivos para poder descargar e instalar My Sql:
Introducción a Bases de Datos Relacionales
Las bases de datos relacionales se basan en el Modelo Relacional usando N cantidad de tablas para representar, tanto los datos, como las relaciones entre estos. Es poco frecuente encontrar casos de una bb.dd. con una sola tabla pero, en el caso de que se dé esta situación, se le denomina como Base de datos Plana. El modelo relacional, en el cual se apoyan estas bases de datos, almacenan la información en un conjunto de tablas, y a su vez, las aprovechan para representar tanto los datos como también las relaciones entre cada una de estas.
3 - Descripción del Proyecto
Temática para el trabajo final:
Base de datos de una Empresa de Medicina Prepaga donde se va a hacer foco en un modelo de esquema copo de nieve.
La empresa de medicina prepaga tiene varios centros donde cada uno de ellos tiene una especialidad particular. La estructura de la base de datos nos ayuda a almacenar los datos de forma eficiente y de ellos podemos obtener la siguiente información:
- Cobros de afiliados y pagos a proveedores por centro médico.
- Diagnósticos y consultas de los afiliados por centro y medico atendido.
- Fechas de las consultas y los turnos.
- Insumos por proveedor, por tipo y por centro médico.
- Datos de nuestros médicos y afiliados.
- Distintos medios por los cuales se llevan a cabo las operaciones de cobros y pagos.
- Resultados netos de caja por periodo y por centro médico.
El objetivo es introducirnos en el mundo de las bases de datos relacionales, entender las distintas funcionalidades que nos proveen para el armado de una base de datos y otras sentencias que nos ayuden al armado final de la base de datos de una empresa de medicina prepaga.
4 - Descripción de las tablas
Tablas
Cuando nos referimos a una tabla, estamos hablando específicamente de un tipo de elemento, que cumple el paradigma de Modelado de datos, y permite guardar la información denominada registros. Cada tabla se compone de Campos y Columnas. Cada campo debe ser único además de tener un tipo de dato asociado. Cada Columna de una tabla, define el total de la información que se almacena, comúnmente llamada registro. Un registro es el dato alojado en forma de fila, dentro de una tabla. Otro nombre que se le aplica comúnmente a los registros, es tupla. Las tablas también suelen ser llamadas, mucho más formalmente: entidad. Y, en algunos textos algo más antiguos: relación. Y al igual que el nombre tupla, aplicado a los registros, los campos o columnas también son denominados más formalmente como: atributos.
Estructura de Tablas
Es una estructura de tablas, las cuales a su vez se relacionan con otras tablas. Su principal característica es no poseer información repetida de forma innecesaria, lo que permite adicionar más información sin llegar a afectar la otra almacenada.
Ventajas del modelo Relacional
Favorece el proceso de normalización, el cual permite eliminar la redundancia de los datos.
Permite realizar consultas y obtener reportes de forma ágil y rápida por medio de SQL u otro lenguaje de base de datos estructurado.
Se pueden crear una o varias relaciones entre todas las tablas.
Ayuda a evitar la duplicidad de registros guardados.
Atomiza la información de la mejor forma posible.
Garantiza la integridad referencial.
Si un registro se relaciona con otro registro de otra tabla, no permite que el mismo sea eliminado. Asimismo, si se quiere borrar, también pasará con todos los datos relacionados.
Tipos de Relaciones
Logicas
Clave primaria PK: también llamada llave primaria o primary key, hace que el registro sea unívoco y obligatoriamente no nulo.
Clave foránea FK: también llamada foreign key, clave secundaria o clave externa, puede ser -o no- una clave primaria dentro de la tabla. Su característica es que es el punto de enlace con otra tabla donde ésta es primary key.
Clave índice: es un campo que facilita la búsqueda dentro de una tabla. Generalmente son campos primary key.
Tablas, descripción y atributos
A continuación se detallaran cada una de las tablas que componen el DER con sus atributos y descripciones:
\[ \textbf{Tabla: Afiliado }\]
Atributos | Descripcion |
---|---|
id_afiliado | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
nombre | VARCHAR(50) NOT NULL |
apellido | VARCHAR(50) NOT NULL |
VARCHAR(50) NOT NULL | |
telefono | INT NOT NULL |
fecha_nacimiento | DATE NOT NULL |
domicilio | VARCHAR(50) NOT NULL |
estado_civil | VARCHAR(50) NOT NULL |
dni | INT NOT NULL |
id_ocupacion | INT NOT NULL FOREIGN KEY |
id_plan | INT NOT NULL FOREIGN KEY |
Esta tabla contiene los atributos de los afiliados de la empresa de medicina prepaga, podemos observar el ID como Primary Key y por último dos FK que hacen referencia a la ocupación del empleado y el plan. Estas serán dos tablas que se crean a parte para no repetir datos.
Un ejemplo sencillo: La ocupación puede ser empleado bajo relación de dependencia, monotributista, desempleado o jubilado. Estos datos se pondrán aparte en una tabla llamada ocupacion_afiliado y en la tabla afiliado solo de pondrá el número de ID ya que al ir dando de alta a los afiliados en el sistema nos ahorraríamos espacio en la base de datos al no tener que repetir tantos caracteres por fila y solamente completar con el ID de ocupación que viene de la tabla ocupacion_afiliado.
\[ \textbf{Tabla: Ocupación Afiliado }\]
Atributos | Descripción |
---|---|
id_ocupacion | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
ocupación | VARCHAR(50) NOT NULL |
Esta tabla contiene los siguientes datos: Bajo relación de dependencia, monotributista, desempleado y jubilado.
\[ \textbf{Tabla: Plan Afiliado }\]
Atributos | Descripción |
---|---|
id_plan | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
nombre | VARCHAR(50) NOT NULL |
Esta tabla contiene los siguientes datos: Medium y Premium.
\[ \textbf{Tabla: Medico }\]
Atributos | Descripción |
---|---|
id_medico | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
nombre | VARCHAR(50) NOT NULL |
apellido | VARCHAR(50) NOT NULL |
fecha_nacimiento | DATE NOT NULL |
domicilio | VARCHAR(50) NOT NULL |
telefono | INT NOT NULL |
Esta tabla contiene los datos de los médicos que prestan su servicio a distintos centros médicos.
\[ \textbf{Tabla: Centro Médico }\]
Atributos | Descripción |
---|---|
id_centro | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
nombre | VARCHAR(50) NOT NULL |
direccion | VARCHAR(50) NOT NULL |
telefono | INT NOT NULL |
codigo_postal | INT NOT NULL |
VARCHAR(50) NOT NULL | |
fecha_nacimiento | DATE NOT NULL |
especialidad | VARCHAR(50) NOT NULL |
\[ \textbf{Tabla: Consulta }\]
Atributos | Descripción |
---|---|
id_consulta | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
consulta | VARCHAR(50) NOT NULL |
diagnostico | VARCHAR(50) NOT NULL |
Esta tabla contiene los datos de las consultas de los afiliados y los diagnósticos posterior a la consulta.
\[ \textbf{Tabla: Turnos }\]
Atributos | Descripción |
---|---|
id_turno | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
fecha | DATE NOT NULL |
id_medico | INT NOT NULL FOREIGN KEY |
id_afiliado | INT NOT NULL FOREIGN KEY |
id_consulta | INT NOT NULL FOREIGN KEY |
id_centro | INT NOT NULL FOREIGN KEY |
Esta tabla contiene los datos del turno. Se conecta con varias tablas, entre ellas la de consulta. Una vez registrado el turno en la base de datos y luego de la consulta se completan los valores en la tabla consulta con el diagnostico final.
\[ \textbf{Tabla: Proveedor }\]
Atributos | Descripción |
---|---|
id_proveedor | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
nombre | VARCHAR(50) NOT NULL |
telefono | INT NOT NULL |
cuit | INT NOT NULL |
VARCHAR(50) NOT NULL |
La tabla contiene todos los datos de los proveedores que se van dando de alta. No tiene muchos movimientos en general.
\[ \textbf{Tabla: Tipo Insumo }\]
Atributos | Descripción |
---|---|
id_tipo_insumo | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
tipo_insumo | VARCHAR(50) NOT NULL |
Tabla que contiene datos sobre el tipo de insumo que compran los centros médicos. No tiene muchos movimientos.
\[ \textbf{Tabla: Insumos }\]
Atributos | Descripción |
---|---|
id_insumo | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
nombre | VARCHAR(50) NOT NULL |
id_centro | INT NOT NULL FOREIGN KEY |
id_tipo_insumo | INT NOT NULL FOREIGN KEY |
id_proveedor | INT NOT NULL FOREIGN KEY |
Esta tabla contiene los datos de cada uno de los insumos.
\[ \textbf{Tabla: Centro Médico Insumos }\]
Atributos | Descripcion |
---|---|
id_centro_medico_insumos | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
nombre | VARCHAR(50) NOT NULL |
id_centro | INT NOT NULL FOREIGN KEY |
id_insumo | INT NOT NULL FOREIGN KEY |
Tabla que conecta de muchos a muchos los insumos con los centros médicos.
\[ \textbf{Tabla: Pagos }\]
Atributos | Descripción |
---|---|
id_pagos | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
fecha_transaccion | DATE NOT NULL |
importe | INT NOT NULL |
id_medio_operacion | INT NOT NULL FOREIGN KEY |
id_proveedor | INT NOT NULL FOREIGN KEY |
id_centro | INT NOT NULL FOREIGN KEY |
Tabla que registra todos los pagos de todos los centros médicos. Se puede consultar el total de pagos por cada centro médico.
\[ \textbf{Tabla: Cobros }\]
Atributos | Descripción |
---|---|
id_cobros | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
fecha_transaccion | DATE NOT NULL |
importe | INT NOT NULL |
id_medio_operacion | INT NOT NULL FOREIGN KEY |
id_afiliado | INT NOT NULL FOREIGN KEY |
id_centro | INT NOT NULL FOREIGN KEY |
Tabla que registra todos los cobros de todos los centros médicos. El id_centro que aparece en la línea del cobro de la empresa de medicina prepaga no se relaciona necesariamente con que le haya hecho un pago a ese centro médico, sino que hace relación a que con mayor frecuencia se atiende en ese centro y se termina imputando el cobro de esa manera.
\[ \textbf{Tabla: Medio Operación }\]
Atributos | Descripción |
---|---|
id_medio_operacion | INT NOT NULL PRIMARY KEY AUTOINCREMENT |
tipo_medio_operacion | VARCHAR(50) NOT NULL |
Tabla que registra todos medios financieros de pagos: Tarjeta de Débito, Crédito, Efectivo y Transferencias.
5 - Diagrama Entidad de Relación
Un diagrama entidad-relación, también conocido como modelo entidad relación o ERD, es un tipo de diagrama de flujo que ilustra cómo las “entidades”, como personas, objetos o conceptos, se relacionan entre sí dentro de un sistema. Los diagramas ER se usan a menudo para diseñar o depurar bases de datos relacionales en los campos de ingeniería de software, sistemas de información empresarial, educación e investigación.
En este link se puede elaborar un DER preliminar para luego trabajarlo en una base de datos.
Luego de crear las tablas en My Sql podemos ver el Reverse Engineer.
La ingeniería inversa o retroingeniería es el proceso llevado a cabo con el objetivo de obtener información o un diseño a partir de un producto, con el fin de determinar cuáles son sus componentes y de qué manera interactúan entre sí y cuál fue el proceso de fabricación.
La siguiente imagen representa el Reverse Engineer de la base de datos creada:
6 - Inserción de datos
Metodologia utilizada: Los valores en cada una de las tablas se insertaron desde archivos .csv.
Los archivos son los siguientes:
Cada una de las tablas contiene 10 observaciones
Ejemplo tabla afiliados:
A continuación se adjuntan scripts de los pasos para importar los datos y MySql final:
7 - Incersion de Datos desde Python
A continuación, se adjunta un breve .gif que muestra la ingesta de datos a My Sql desde Python. Se utiliza un While que finaliza cuando el usuario desea dejar de ingresar datos. Los datos se ingresan en la tabla de afiliados dándolos de alta en el sistema.