bloque1:fundamentos
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
bloque1:fundamentos [2021/09/21 10:24] – editor externo 127.0.0.1 | bloque1:fundamentos [2024/09/16 19:34] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Fundamentos de Bases de Datos ====== | ====== Fundamentos de Bases de Datos ====== | ||
+ | ===== Sistema de Información ===== | ||
+ | |||
+ | Un Sistema de Información es un conjunto de elementos destinados al tratamiento y administración de datos e información, | ||
+ | |||
+ | Esta definición de //Sistema de Información// | ||
+ | |||
+ | Hay que tener en cuenta que, dentro del campo de la informática, | ||
+ | |||
+ | Parte del presente curso consiste en el desarrollo de aplicaciones que conectan con Bases de Datos para gestionar datos, por lo que de cierta manera también vamos a crear nuestros propios Sistemas de Información, | ||
+ | |||
+ | {{ sistemadeinformacion.png |Sistema de Información}} | ||
+ | |||
+ | ===== ¿Es necesario siempre usar un SGBD? ===== | ||
+ | |||
+ | En nuestro campo, un fichero se podría considerar como la unidad mínima de almacenamiento de cualquier tipo de información. No es más que un conjunto de registros almacenados con una estructura homogénea, que permite ser accedido para su tratamiento desde alguna aplicación informática. Existen muchos tipos de ficheros atendiendo al //formato// en el que se escriben: texto plano, imagen, PDF, . . . y para trabajar con cada uno de esos formatos existen una o varias aplicaciones. Y por lo general, un tipo de aplicación sólo abrirá un tipo de fichero, el tipo de fichero para el que ha sido diseñada: El Bloc de Notas abre ficheros de texto plano, Adobe Reader abre ficheros PDF, Picasa abre ficheros de imagen, . . . Aunque también podemos encontrarnos con aplicaciones que son capaces de trabajar con diferentes formatos, similares entre sí (Microsoft Word, por ejemplo). | ||
+ | |||
+ | Una Base de Datos es un conjunto de ficheros interrelacionados entre sí, creados por un SGBD, que deben ser gestionados y accedidos a través de dicha herramienta. Por lo general se tratara de una gran cantidad de información repartida entre varios ficheros, que es accedida desde una herramienta específica de forma que el usuario se abstrae de cómo está organizada dicha información. No nos interesa conocer qué ficheros forman la Base de Datos, dónde están ni cuanto ocupan; la herramienta que utilizamos se ocupa de todo ese trabajo. Nosotros, como usuarios de una Base de Datos, tendremos a nuestra disposición todos los datos y numerosas herramientas que nos permitan trabajar con ellos de una forma cómoda (utilidades para buscar, para ordenar, para eliminar, . . .) | ||
+ | |||
+ | Hay que tener en cuenta que, aunque las Bases de Datos sean la solución a los problemas de almacenamiento y consulta de grandes cantidades de información, | ||
+ | |||
+ | Otra ventaja que presenta el uso de Bases de Datos frente al empleo de ficheros es el ahorro que esto supone. Hay que pensar que en el caso de que no contemos con un SGBD para el desarrollo de una aplicación determinada, | ||
+ | |||
+ | Por otro lado hay que tener en cuenta, según veremos más adelante, que en la actualidad existen muchos tipos de SGBD, desde lo que se conoce como el clásico SGBD relacional hasta pequeños SGBD que apenas ocupan 1MB de espacio y no requieren instalación, | ||
+ | |||
+ | ===== Sistema gestor de Bases de Datos ===== | ||
+ | |||
+ | Un SGBD es una herramienta software, más o menos compleja, que permite la creación y gestión de una Base de Dato. En el punto anterior hemos visto que una Base de Datos estaba compuesta de varios ficheros relacionados entre sí. El SGBD es la herramienta que se encarga de organizar esos ficheros manteniendo la información siempre accesible para el usuario de la forma más eficiente posible, tanto en espacio como en velocidad de acceso. | ||
+ | |||
+ | Cuando gestionamos una Base de Datos a través de un SGBD, estamos añadiendo un nivel de abstracción puesto que " | ||
+ | |||
+ | {{ sgbd.png |Sistema Gestor de Bases de Datos}} | ||
+ | |||
+ | Hay que tener en cuenta que actualmente existen diferentes tipos de SGBD en cuanto al nivel de conocimientos técnicos que se requieren para trabajar con ellos. Por citar un ejemplo, un SGBD como //MySQL// nunca podrá ser utilizado por usuarios con escasos conocimientos técnicos puesto que no está pensado como aplicación para el usuario final, sino como SGBD de apoyo para otras aplicaciones, | ||
+ | |||
+ | ==== Características deseables ==== | ||
+ | |||
+ | En general, de cualquier Sistema de Información, | ||
+ | |||
+ | * **CRUD**: El acrónimo CRUD hace referencia a las 4 operaciones básicas que cualquier SGBD debería proporcionar: | ||
+ | * **Recuperación de la información**: | ||
+ | * **Consistencia**: | ||
+ | * **Validez**: | ||
+ | * **Velocidad**: | ||
+ | * **Transacciones atómicas**: | ||
+ | * **Persistencia y soporte para Backups**: Toda la información almacenada por el SGBD debe ser persistente. Es decir, no debe desaparecer. Una vez se haya realizado una operación, la información no puede cambiar. De otra manera no podríamos " | ||
+ | * **Capacidad de extender sus características**: | ||
+ | * **Seguridad**: | ||
+ | |||
+ | ==== Funciones ==== | ||
+ | |||
+ | Por eso, podríamos decir que las funciones de todo SGBD son las siguientes: | ||
+ | |||
+ | * **Crear y organizar la Base de Datos** Esta herramienta se encarga de la creación y gestión de la Base de Datos, abstrayendo a sus usuarios de dónde y cómo se organiza internamente. El administrador de la Base de Datos dispone de las herramientas | ||
+ | * **Control de acceso** No todos los SGBD lo incorporan, pero la mayoría dan soporte a un control en el acceso a la información mediante el empleo de un sistema de cuentas de usuario y privilegios por el que el administrador de la Base de Datos podrá decidir qué usuarios puede realizar determinadas tareas sobre objetos determinados de la Base de Datos. De esa manera se limita el acceso a la información más crítica y se limitan las acciones que | ||
+ | * **Evitar la redundancia e inconsistencia de los datos** Quizás sea una de las funciones más importantes que debe llevar a cabo cualquier SGBD. La // | ||
+ | * **Evitar anomalías en el acceso concurrente** Puesto que normalmente varios usuarios intentarán acceder simultáneamente a la misma Base de Datos, habrá que dar solución a los problemas que pueda ocasionar la modificación simultánea de un mismo dato por más de un usuario. Cualquier SGBD con soporte multiusuario deberá dar soporte a esta característica. | ||
+ | * **Garantizar la correcta ejecución de las transacciones** | ||
+ | |||
+ | {{ transaccion.png|Flujo de una transacción}} | ||
+ | |||
+ | Si hablamos de un SGBD con soporte para transacciones (SGBD transaccional), | ||
+ | * Atomicidad (**A**tomicity): | ||
+ | * Consistencia (**C**onsistency): | ||
+ | * Aislamiento (**I**solation): | ||
+ | * Durabilidad (**D**urability): | ||
+ | |||
+ | Como ejemplo para entender el concepto de transacción hay que imaginar el movimiento de dinero entre dos cuentas bancarias. Se trata de una sola operación que conlleva la ejecución de más de una tarea (retirar el dinero de la cuenta origen e incrementarlo en la cuenta destino) de forma que nunca debería ejecutarse a medias (no podemos sólo retirar el dinero de la cuenta origen o sólo incrementar el saldo en la de destino). | ||
+ | |||
+ | * **Respaldo y recuperación** La gran mayoría de SGBD proporcionan herramientas adicionales para el respaldo y la recuperación. Debe ser posible realizar una copia de respaldo de toda la Base de Datos en cualquier momento para su posterior recuperación en caso de fallo. | ||
+ | |||
+ | No todos los SGBD implementan todas las funcionalidades que se han descrito anteriormente puesto que en determinadas ocasiones no nos serán necesarias. Por ejemplo, Microsoft Access no da soporte a acceso concurrente ni tampoco da solución a ciertos problemas de seguridad y control de acceso, pero no es uno de sus objetivos. Se trata de una Base de Datos incluida en un paquete ofimática y no debería usarse en entornos más complejos. Por otro lado, sistemas como Oracle, SQL Server o MySQL implementan muy buenos soportes para acceso concurrente, | ||
+ | |||
+ | ==== Componentes ==== | ||
+ | |||
+ | Normalmente existe una separación clara entre los componentes principales de la gran mayoría de SGBD. Lo más común es la separación entre lado Cliente y lado Servidor (// | ||
+ | |||
+ | {{ clienteservidor.jpg |Arquitectura cliente-servidor}} | ||
+ | |||
+ | Si miramos dentro del motor de un SGBD, podemos encontrarnos los siguiente componentes: | ||
+ | |||
+ | * **Administrador de Almacenamiento**: | ||
+ | * **Procesador de consultas**: | ||
+ | * **Gestor de transacciones**: | ||
+ | |||
+ | {{ componentes.png |Componentes de un SGBD}} | ||
+ | |||
+ | ==== Tipos ==== | ||
+ | |||
+ | | ||
+ | |||
+ | === Relacional === | ||
+ | |||
+ | Se ajustan al modelo relacional, que es actualmente el modelo de Base de Datos más extendido. Es el modelo de datos más utilizado actualmente, | ||
+ | |||
+ | {{ tablas_relacionales.png |Modelo Relacional}} | ||
+ | |||
+ | Los SGBD relacionales proporcionan una serie de funcionalidades, | ||
+ | |||
+ | * **Tipos de datos**: Cada columna tiene un tipo de dato definido de manera que el SGBD no permite almacenar valores de otro tipo en dicha columna | ||
+ | * **Restricciones**: | ||
+ | * **Integridad referencial**: | ||
+ | * **Consultas complejas**: | ||
+ | | ||
+ | Las Bases de Datos relacionales son apropiadas si: | ||
+ | |||
+ | * Es necesario realizar consultas muy complejas entre diferentes tablas | ||
+ | * Es necesario validar la información entre tablas | ||
+ | * Se permite que un dato pueda tener cualquier número de valores | ||
+ | * Es necesario construir nuevas consultas que no habían sido planificadas cuando se diseñó la Base de Datos | ||
+ | | ||
+ | Por otro lado, no son apropiadas si: | ||
+ | |||
+ | * Es necesario definir una topología determinada para trabajar con la aplicación correspondiente, | ||
+ | * En muy contadas situaciones donde las necesidades de rendimiento son muy elevadas y las reglas a las que se someten las Bases de Datos relacionales ralentizan el funcionamiento global | ||
+ | |||
+ | === XML === | ||
+ | |||
+ | //XML// es un lenguaje para almacenar información de forma jerárquica. Es un lenguaje que no proporciona ninguna forma de crear, buscar, modificar o validar información. Sin embargo, se usa ampliamente para almacenar, transferir y recuperar datos jerárquicos y hay muchas herramientas para trabajar con estos ficheros de una manera sencilla. | ||
+ | | ||
+ | Además, es un lenguaje muy utilizado para el intercambio de información entre aplicaciones remotas a través de Internet. | ||
+ | |||
+ | En definitiva, el lenguaje XML sólo especifica la forma de escribir el fichero y organizar la información mediante las etiquetas que da sentido a cada uno de los valores almacenados y la jerarquía entre estas etiquetas marca la dependencia de las mismas. Así, en función del uso que queramos darle, deberemos hacernos con la herramienta determinada que nos permita gestionar el fichero XML de la forma que más nos convenga. Para el caso que nos ocupa, existen herramientas como //xbird// que permiten acceder a ficheros XML para trabajar como si de una Base de Datos se tratara, proporcionando lo que se conoce como procesador //XQuery// para dar soporte a un lenguaje de consultas y proporcionando un rendimiento óptimo en el acceso a los datos, pudiéndose trabajar con ficheros de hasta varios GBs. | ||
+ | |||
+ | {{ xml.png |Estructura de un fichero XML}} | ||
+ | {{ xml2.png |Estructura de un fichero XML}} | ||
+ | |||
+ | Las Bases de datos XML son apropiadas si: | ||
+ | |||
+ | * Los datos son jerárquicos | ||
+ | * Las herramientas XML proporcionan las funcionalidades que necesitas | ||
+ | * Vas a utilizar aplicaciones software que entienden el formato XML | ||
+ | | ||
+ | Por otro lado, no convienen si: | ||
+ | |||
+ | * Los datos no son jerárquicos | ||
+ | * Es necesario realizar validaciones complicadas | ||
+ | * Es necesario relacionar de alguna manera la información | ||
+ | * La Base de Datos es muy grande como para reescribir el fichero completo cada vez que se realiza algún cambio | ||
+ | | ||
+ | === Orientado a objetos === | ||
+ | |||
+ | En este modelo todos los elementos de la Base de Datos se representan como objetos y siguen el paradigma de la // | ||
+ | |||
+ | Puesto que el paradigma de orientación a objetos es relativamente nuevo, y aunque en la programación | ||
+ | | ||
+ | {{ Diagrama_de_clases.png |Modelo de una BDOO}} | ||
+ | |||
+ | Las Bases de Datos orientadas a objetos son apropiadas si: | ||
+ | |||
+ | * La aplicación se está programando con algún lenguaje de programación orientado a objetos | ||
+ | * No es necesario realizar consultas muy complejas | ||
+ | |||
+ | Por otro lado, no convienen si: | ||
+ | |||
+ | * Es necesario comunicarse con herramientas externas para almacenar cierta información en otros modelos más habituales como el relacional | ||
+ | * Es necesario realizar consultas complejas | ||
+ | * La aplicación no se va a programar con un lenguaje orientado a objetos | ||
+ | * Es necesario realizar ciertas validaciones que este tipo de bases de datos no proporciona | ||
+ | | ||
+ | === Objeto-Relacional === | ||
+ | |||
+ | Aparecen como una extensión al modelo relacional, por lo que los datos se almacenan en forma de tablas. | ||
+ | |||
+ | Las Bases de Datos objeto-relacionales son apropiadas si: | ||
+ | |||
+ | * La arquitectura de la aplicación está orientada a objetos | ||
+ | * Es necesario realizar consultas complejas de datos relacionados entre sí | ||
+ | * Es necesario realizar validaciones de datos | ||
+ | * En el equipo de trabajo se mantiene una separación entre programadores de la aplicación y la base de datos | ||
+ | | ||
+ | Por otro lado, no convienen si: | ||
+ | * Para el desarrollo de la aplicación no se va a utilizar un lenguaje orientado a objetos | ||
+ | |||
+ | === NoSQL === | ||
+ | |||
+ | Aparecen como un cambio de tendencia frente a los clásicos SGBD relacionales. Su principal característica es que no emplean el lenguaje SQL como principal lenguaje de consultas (de ahí su nombre, No only SQL). Tampoco soportan operaciones //JOIN// como en los sistemas relacionales y no suelen garantizar //ACID//. | ||
+ | |||
+ | Su principal característica es la escalabilidad horizontal. Es decir, el rendimiento de la Base de Datos se mantiene a medida que se van añadiendo nodos (equipos) al sistema. Esto comenzó a ser una necesidad cuando las principales compañias de Internet (Google, Amazon, Twitter, . . .) comenzaron a necesitar grandes sistemas que dieran respuesta en tiempo real. Los clásicos SGBD relacionales no daban respuesta a sus necesidades, | ||
+ | |||
+ | En general, las Bases de Datos NoSQL son apropiadas si: | ||
+ | |||
+ | * Es necesario manejar grandes cantidades de datos | ||
+ | * Es necesario escalar (añadiendo nodos al sistema) | ||
+ | |||
+ | Por otro lado, no son apropiadas para cualquier tipo de proyecto puesto que no siempre el rendimiento será lo más importante, o al menos no a costa de perder reglas de validación o coherencia o no garantizar //ACID//. | ||
+ | |||
+ | Algunos ejemplos conocidos de SGBD NoSQL son [[https:// | ||
+ | |||
+ | {{ sgbds.png |Sistemas Gestores de Bases de Datos}} | ||
+ | |||
+ | ==== Clasificación según accesos simultáneos soportados ==== | ||
+ | |||
+ | === Monousuario === | ||
+ | |||
+ | Son aquellos SGBD que no permiten que más de un usuario pueda estar conectado con la Base de Datos al mismo tiempo. Normalmente no soportan ningún tipo de control de usuario por lo que la Base de Datos se reducirá a un simple fichero al que se podrá acceder desde la aplicación como si de cualquier otro tipo de documento se tratara. Así, no soportan el control de concurrencia ni cualquier otra característica | ||
+ | |||
+ | === Multiusuario === | ||
+ | |||
+ | Permiten conexiones simultáneas con una misma Base de Datos. Tiene soporte para control de cuentas de usuario, y por tanto incluyen todo el soporte para el control de concurrencia, | ||
+ | |||
+ | ==== Clasificación según tamaño ==== | ||
+ | |||
+ | === SGBD ligero === | ||
+ | |||
+ | Se trata de pequeños SGBD (incluso < 1MByte de tamaño) que dan soporte a algunas de las principales | ||
+ | |||
+ | {{ sqlite.png |SQLite}} | ||
+ | |||
+ | === SGBD Ofimática === | ||
+ | |||
+ | Algo más potentes que los SGBD considerados como ligeros, con algunas funciones más, muy utilizados en Ofimática para pequeñas Bases de Datos (normalmente algunos MBytes). //Ms Access// y // | ||
+ | |||
+ | === SGBD de alto rendimiento === | ||
+ | |||
+ | Ideales para entornos dedicados a la gestión de datos o bien para aplicaciones que manejan ya una gran cantidad de datos y necesitan algunas funciones que otros SGBD no proporcionan, | ||
+ | Otros SGBD de alto rendimiento, | ||
+ | |||
+ | ===== Tipos de Bases de Datos ===== | ||
+ | |||
+ | ==== Bases de Datos centralizadas ==== | ||
+ | |||
+ | Son el tipo de Bases de Datos más común. Normalmente, | ||
+ | |||
+ | {{ centralizada.jpg |Base de Datos centralizada}} | ||
+ | |||
+ | === Ventajas === | ||
+ | |||
+ | * Fácil implementación. Al tratarse de una solución ampliamente adoptada es más sencillo de implementar y más fácil actuar ante posibles fallos | ||
+ | * Diseño sencillo. Al tratarse de una solución conocida, el diseño lógico es también más sencillo de realizar | ||
+ | | ||
+ | === Desventajas === | ||
+ | |||
+ | * En caso de fallo, al existir una sola ubicación física de la Base de Datos, éste afectará a todos los datos almacenados en ella | ||
+ | |||
+ | ==== Bases de Datos distribuidas ==== | ||
+ | |||
+ | Una Base de Datos distribuida es un conjunto de bases de datos relacionadas lógicamente entre sí que se encuentran localizadas en diferentes ubicaciones físicas. Puede tratarse de dos máquinas conectadas entre sí mediante una //LAN// o bien a través de Internet. Como consecuencia, | ||
+ | |||
+ | {{ distribuida.jpg |Base de Datos distribuida}} | ||
+ | |||
+ | === Ventajas === | ||
+ | |||
+ | * Es más barato crear una red de máquinas de bajo rendimiento que disponer de una sola máquina muy potente | ||
+ | * En cuanto a la disponibilidad, | ||
+ | * Puesto que los datos se encuentran distribuidos, | ||
+ | |||
+ | === Desventajas === | ||
+ | |||
+ | * Un sistema de Bases de Datos distribuida es complejo de poner en marcha y mantener | ||
+ | * En cuanto a la seguridad, al disponer de varios nodos, se dispone de varios sistemas diferentes | ||
+ | * Es un sistema bastante nuevo, por lo que existe poca experiencia ante fallos poco comunes | ||
+ | * Al disponer de varios nodos es posible que se necesite más mano de obra especializada en cada uno de ellos | ||
+ | ===== Arquitectura de una aplicación ===== | ||
+ | |||
+ | Una vez que hemos visto qué es un SGBD, una Base de Datos y los diferentes tipos con los que nos podemos encontrar justo con sus ventajas e inconvenientes, | ||
+ | |||
+ | Como ya se ha visto más arriba, muchos de los SGBD trabajan siguiendo lo que se conoce como arquitectura cliente-servidor. Siguiendo esta misma filosofía, existe la // | ||
+ | |||
+ | * **Capa de presentación** Es la capa que ve el usuario. Presenta la aplicación al usuario, le permite interactuar con el mismo y le muestra la información que éste solicita. En definitiva es lo que se conoce como interfaz de usuario. | ||
+ | |||
+ | * **Capa de negocio** En esta capa se encuentra toda la lógica de la aplicación y será donde se realicen todos los procesos de tratamiento de la información obtenida en la capa de datos y cuyos resultados se muestran al usuario mediante la capa de presentación. | ||
+ | |||
+ | * **Capa de datos** En esta capa residen los datos. En ella se encuentran los SGBD y reciben peticiones para acceder o escribir datos desde la capa de negocio. | ||
+ | |||
+ | En aplicaciones de tamaño medio es bastante habitual encontrar un modelo lógico basado en 3 capas pero físicamente distribuido solamente en 2. En estos casos lo habitual será que el usuario cargue la capa de presentación en su propio equipo (ya sea ejecutando la aplicación o cargando la web en su navegador) y que las capas de negocio y datos se encuentren en otro equipo remoto (el servidor). A medida que la aplicación se haga más exigente las capas de negocio y datos pueden separarse en diferentes equipos (normalmente físicamente más cerca) y según se exige un mayor rendimiento se pueden añadir equipos a cualquiera de estas dos capas. | ||
+ | |||
+ | {{ 3_capas.png | Arquitectura en 3 capas}} | ||
+ | |||
+ | {{ 3_capas2.jpg | Arquitectura en 3 capas}} | ||
+ | |||
+ | {{ lamp.png? | ||
---- | ---- | ||
- | (c) {{date> %Y}} Fernando Valdeón | + | (c) {{date> %Y}} Santi Faci y Fernando Valdeón |
bloque1/fundamentos.1632219896.txt.gz · Última modificación: 2024/09/16 19:34 (editor externo)