¡Hola ingenieros! ¿Cómo van con esos proyectos de software?, estoy seguro que ya están aplicando los conceptos que hemos ido conociendo en el transcurso de la clase. En esta ocasión quiero que platiquemos sobre un tema que prácticamente es obligatorio para todo ingeniero de software el cual tiene que ver con las bases de datos. Es importante recordarles que vivimos en una sociedad globalizada y cargada de información por todas partes: datos por aquí, datos por allá, la suma de todos estos datos llegan a formar parte de nuestra realidad y nuestros modelos socio-económicos: manejo de precios, datos estadísticos sobre la población, consumo, tasa de préstamos en bancos, tasa de cambio de las diversas monedas en el mundo con respecto a nuestro Lempira y en fin, muchas de las decisiones que se toman en nuestro planeta y en nuestro país son basadas en datos, en información; pero, ¿de dónde sale todo esto? En la mayoría de casos de una base de datos o de un conjunto de bases de datos. Por ejemplo: La Universidad Tecnológica de Honduras suele generar en sus sistemas una serie de reportes sobre las tendencias de sus alumnos en relación a las clases que inscriben, sus calificaciones, inasistencias y lugares de residencia: gracias a esta información es posible poder determinar los precios, la deserción, si es posible poder abrir otro Campus en otra ciudad del país, etc. ¿de dónde sale toda esta información? Obviamente de una base de datos, y sumado a esto la Universidad Nacional Autónoma de Honduras exige a todas las demás universidades de nuestro país a entregar información de sus bases de datos para ellos poder generar más información la cual será de utilidad para medir la situación Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) actual del país en materia de educación superior y por ende para darla a organismos internacionales para tomar decisiones sobre la ayuda que se da a Honduras, en fin todo viene de una base de datos y se irá a una base de datos. Realmente hoy si me atrevo a decir que vivimos en una verdadera sociedad de información: una sociedad digital. El tema de las bases de datos es obligatorio mis estimados ingenieros, así que en este documento veremos los tipos que hay y bajo que modelos se diseñan. En un desarrollo de software no se empieza programando “a lo loco”, sino más bien se realiza un buen diseño de base de datos que tenga sentido con lo plasmado en los diagramas de flujo de datos para que así la codificada del software sea más fácil y ordenada, como experiencia personal les puedo decir que lo primero que yo hago antes de ponerme a programar es mi base de datos. ¿Qué es una base de datos? Como lo aprendieron en su clase de Diseño de base de datos (la cual es requisito de esta asignatura de ingeniería de software I) entonces recordarán que una base de datos es una colección de archivos que actúa como una fuente central de datos destinados a compartirse entre muchos usuarios para una diversidad de aplicaciones1. Como un ejemplo muy genérico de lo que es una base de datos puedo decir que es una tabla con filas y columnas, digamos, un listado de personas con sus direcciones y teléfonos. A pesar de no ser muy compleja y de no tener relaciones está en si es una base de datos de personas con sus teléfonos. Una pequeña tabla hecha en Microsoft Excel puede ser considerado una base de datos siempre y cuando esta cuente con registros distribuidos a través de columnas y filas de forma tabular. Para poder entender mejor una base de datos debemos conocer una serie de conceptos básicos los cuales listo a continuación: 1 Concepto extraído del Libro de Análisis y Diseño de Sistemas, Kendal & Kendal Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) 1. Entidades 2. Atributos 3. Registros 4. Relaciones 5. Claves 6. Metadatos Existen más conceptos, pero estos 6 son fundamentales para que una base de datos sea definida como tal, en breve explico cada uno de ellos. Entidades Son cualquier objeto o evento sobre el cual alguien escoge recopilar datos, Una entidad puede ser cualquier cosa: Una Persona (Cliente, Proveedor, etc.) Un Lugar (Ciudad, País, etc.) Un Objeto (Producto, Material, etc.) Un Evento (Factura, Compra, etc.) Una Unidad de Tiempo (Mes, Año) Un Usuario del sistema de software Atributos Son las características de las entidades. Puede haber muchos atributos para una sola entidad, por ejemplo en un personaje de un videojuego: Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Un Dato es también un Atributo, o sea cada Campo de un Registro es un Atributo del mismo. En una base de datos un atributo es lo mismo que un Campo dentro de una tabla o sea una columna de dicha tabla: Cada campo de la tabla es un atributo y cada uno de ellos tiene un tipo de dato (numérico, texto, fecha, etc.) y un tamaño del máximo de información que permitirá almacenar Registros Un registro es una colección de datos que tiene algo en común con la entidad descrita, o sea que es una combinación de atributos dentro de una tabla: Un registro es una fila dentro de una tabla, cada atributo es una coincidencia de la tabla dentro de un registro. Cada registro toma como modelo la descripción de una entidad a través de sus atributos, podemos decir que cada registro es una de las diversas versiones que puede tener una entidad, por ejemplo: una entidad llamada Persona puede tener diversas versiones, alguno se llamarán Pedro y tendrán el cabello negro, otros se llamarán Pablo y tendrán el cabello café y quizá tengamos otros que se llamen nuevamente Pedro pero que tendrán el cabello Rojo. Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Relaciones Son asociaciones entre las entidades o sea son vínculos entre las diversas entidades, para comprender mejor esto imagine una entidad llamada Padre y otra entidad llamada Hijo ambas entidades se relacionan entre sí ya que por cada Padre pueden haber muchos Hijos, y un Hijo puede tener hasta dos padres (Mamá y Papá). En materia de bases de datos hay tres tipos de relaciones: 1. Relación Uno a Uno (1:1) Es cuando una ENTIDAD solo puede relacionarse con otra ENTIDAD a la vez, por ejemplo: Para cada EMPLEADO hay un PARQUEO TIENE Empleado Parqueo Una PERSONA está casada con otra PERSONA ESTA CASADA CON Persona Persona Observe en ambos diagramas el simbolito que tiene cada terminación de la línea, en las relaciones uno a uno se esa en ambos extremos de la línea que une ambas entidades una raya doble vertical en paralelo: || 2. Relación Uno a Muchos (1:M) Ocurre cuando una ENTIDAD puede tener relación con muchas otras ENTIDADES en una sola dirección, por ejemplo: Cada MEDICO trata muchos PACIENTES Trata Médico Paciente Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) La entidad EMPLEADO puede tener muchos registros para cada DEPARTAMENTO Pertenece A Empleado Departamento Note que el símbolo en las relaciones uno a muchos parte de una raya doble vertical paralela en un extremo: || y una pata de gallo: → en el otro extremo. 3. Relación Muchos a Muchos (M:N) En este caso las entidades podrían tener muchas asociaciones en cualquier dirección, o sea que cada registro se puede relacionar con más registros y a su vez estos registros pueden relacionarse con otros registros. Por ejemplo: Cada ASIGNATURA tiene muchos ESTUDIANTES, Así como cada ESTUDIANTE tiene muchas ASIGNATURAS. Toma Clases Estudiante Por ejemplo: Cada VENDEDOR atiende muchas CIUDADES, Así como cada CIUDAD tiene muchos VENDEDORES. Atiende Vendedor Ciudad Claves Una clave es uno de los datos en un registro que se usa para identificar al registro o para asociar un dato de un registro con otra tabla. A las claves también se les conoce como llaves Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Hay varios tipos de claves, las más usadas son: 1. Clave Primaria Es la que hace que un registro de sea único, una clave primaria solo puede estar compuesta por un campo, por ejemplo: Por ejemplo una tabla de Clientes que tiene dos campos: ClienteID y Nombre, el campo ClienteID es la llave primaria de la tabla por lo tanto no pueden haber dos cliente con el mismo ClienteID Este tipo de llaves se utilizan para evitar que haya dos registros con el mismo número o código. 2. Clave Secundaria Es la que hace único a un registro pero a diferencia de la primera esta puede estar conformada por varios campos. Por ejemplo una tabla que tiene tres campos: Categoria, Codigo y Nombre. Los campos Categoria y Codigo conforman una llave, la llave primaria es el campo Categoria y la llave secundaria es el campo Codigo la combinación de ambas impedirá que existan dos registros con el mismo código dentro de la misma categoría, pero pueden haber dos registros con el mismo código en categorías distintas. Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) 3. Clave Foránea Es la que permite relacionar dos tablas entre sí y es la base para la creación de bases de datos relacionales. En la imagen se muestra una llave foránea entre dos tablas: FacturaCab (encabezado de factura) y FacturaDet (Detalle de una factura). Para que puedan existir elementos en el detalle de una factura debe haberse creado el encabezad o de la misma. Metadatos Los metadatos son datos que definen a los datos en el archivo o base de datos o sea que describen el nombre dado y la longitud asignada a cada dato. Por ejemplo cuando definimos una tabla determinamos los nombres de los campos, su tipo, tu tamaño y algunas reglas adicionales a estos, esos son los metadatos, esa información que determina cómo se comporta un campo (o sea un atributo o dato). Tipos de Bases de Datos Hay diversas formas de clasificar las bases de datos, aquí las clasificaremos de acuerdo a la variabilidad de los datos que estas manejan en dos tipos: 1. Bases de datos estáticas 2. Bases de datos dinámicas A continuación se describe a las mismas: Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Bases de datos estáticas Este tipo de bases de datos se san más que todo para la generación de reportes, hacer proyecciones, tomar decisiones o guardar datos históricos. Los datos que estas almacenan son de solo lectura, o sea que no pueden borrarse u alterarse. Por ejemplo un repositorio de datos (datawarehouse) o un software que almacene los reportes contables en tablas históricas para evitar que alguien cambie información que va a quedarse tal y como se presentó: un balance general, un estado de resultados o una factura del año pasado no debería poder alterarse. Por ejemplo un estado de situación financiera de una empresa es un tipo de reporte que no va a cambiar en el futuro ya que esta refleja la situación de la organización en un momento determinado. Bases de Datos Dinámicas Son aquellas donde los datos almacenados se modifican a través del tiempo, lo que permite operaciones como UPDATE (cambiar), DELETE (borrar) e INSERT (agregar), además de las operaciones fundamentales de consulta (SELECT). El ejemplo más claro es la base de datos de un software para supermercados, un restaurante, una universidad, etc. Este tipo de base de datos es el más utilizado en nuestro país. En el dibujo podemos ver una captura de pantalla de un software para facturar productos en restaurantes, en este tipo de sistemas la información fluye constantemente con cada operación por lo que los datos son dinámicos en todo momento. Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Modelos de bases de datos Las bases de datos también se rigen por modelos o sea por una serie de métodos utilizados para almacenar y recuperar información en las mismas: o sea modelos matemáticos y algoritmos que rigen el funcionamiento de una base de datos. Los modelos más populares son los siguientes: 1. Bases de datos jerárquicas 2. Bases de datos relacionales 3. Bases de datos multidimensionales 4. Bases de datos documentales Para describir a cada uno de estos modelos voy a utilizar un término llamado nodo el cual se refiere a un elemento dentro de una estructura: nodo nodo nodo nodo nodo Bases de Datos Jerárquicas Son aquellas que almacenan la información como una estructura en árbol pero como si lo viéramos de cabeza (al revés), en este modelo un nodo padre puede tener varios nodos hijos, pero un nodo hijo no puede tener varios nodos padres, o sea que este modelo usa única relaciones del tipo uno a muchos (1:M) Curso A Profesor 1 Curso B Escuela Observe como cada profesor tiene varios cursos; pero un curso solo Curso C Profesor 2 Curso D pude pertenecerle a un profesor. Este modelo es muy utilizado en software que van a manejar un gran volumen de información y datos compartidos ya que este modelo permite obtener gran rendimiento y estructuras de datos muy estables en vista de que la relación es lineal y no en telaraña. Su principal limitante es que le resulta imposible representar datos redundantes ya que este tipo de datos por lo general necesitan de relaciones que no sean lineales. Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Características del modelo jerárquico Registros duplicados Desnormalización Integridad referencial Ejemplos de motores de bases de datos jerárquicas Adabas GT.M Focus Bases de Datos Relacionales Es el modelo más popular en la actualidad, de hecho es mi favorito, como dato histórico les puedo decir que fue inventado por la empresa IBM. El modelo relacional dice que no importa la forma y el lugar donde se almacenen los datos ya que estos pueden unirse a través de llaves foráneas (relaciones) donde pueden existir relaciones del tipo 1 a 1, 1 a muchos y muchos a muchos, por lo tanto podríamos decir que la información puede relacionarse en forma de telaraña. El lenguaje más conocido para implementar el modelo de base de datos relacional es el Lenguaje Estructurado de Consultas o SQL por sus siglas en inglés: Structured Query Languaje. El diagrama de entidad -relación es el que mejor describe al modelo de bases de datos relacional Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Características del modelo relacional Existencia de llaves y relaciones por lo que posee Integridad referencial Existencia de integridad de dominio Existencia de triggers, procedimientos almacenados y reglas Su estructura es entidad-relación Permite aplicar las cinco formas normales (las cuales aprendió en la clase de diseño de bases de datos) Su principal limitante es el rendimiento ya que en la validación de las llaves y las relaciones suele consumirse tiempo del CPU (procesador) del servidor de base de datos lo que no hace apto a este modelo para trabajar con información que se almacena a velocidades de milisegundos. Ejemplos de motores de bases de datos relacionales MySQL ó MariaDB! Microsoft SQL Server Oracle DB2 Informix PostgreSQL Este modelo es el más usado en el mundo Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Bases de Datos Multidimensionales Son una versión avanzada de las bases de datos relacionales ya que también manejan el concepto de entidad-relación, la diferencia es que las multidimensionales permiten estructurar los datos en forma de un cubo lo que permite relacionar la información en varias direcciones y crear consultas donde cada dato en cada registro de cada tabla pueda relacionarse con otros datos de otros registros de otras tablas. Características del modelo de bases de datos multidimensional Los datos son redundantes Cada dato puede contener o estar relacionado con más datos Suelen manejar grandes volúmenes de información Permite un análisis rápido de los datos Ejemplos de motores de bases de datos multidimensionales icCube Microsoft Analysis Server Cognos TM1 Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Bases de datos Documentales Son también conocidas como bases de datos NoSQL ya que están diseñadas como si fueran documentos, o sea que cada tabla puede ser un archivo, en este modelo de base de datos no existe la relación de la información lo que permite crear índices de texto completo lo que permite realizar búsquedas más rápidas. Estas bases de datos suelen codificarse en formatos como XML y JSON, además de otros formatos como por ejemplo un libro de Microsoft Excel o un archivo de texto separado por comas o CSV. En resumen una base de datos documental es un archivo plano que permite realizar búsquedas de información de forma más veloz. Su principal limitante es que los datos no están relacionados de ninguna forma por lo que la información no está “amarrada” entre sí. Ejemplos de motores de bases de datos documentales SQLite Apache Cassandra MongoDB RocksDB (usada por Facebook) Una base de datos documental no necesita de un servidor de base de datos como en los modelos de entidad-relación. SQLite es un motor de base de datos que bien preinstalado en los sistemas operativos más populares para teléfonos celulares como ser: Android e iPhone y es un excelente manejador de datos que permite trabajar de forma rápida y ordenada, en lo personal es mi motor de base de datos NoSQL favorito, lo uso para aplicaciones portables donde no quiero que el usuario final tenga que instalar algo en su computadora o teléfono. Material facilitado por Ing. Gerardo Josué Portillo ([email protected]) Humor La razón principal por la que los DBA duran en las empresas: Es cuestión de percepción… Material facilitado por Ing. Gerardo Josué Portillo ([email protected])