Sistema de Gestión de Bases de Datos RelacionalMySQL
Módulo 4
Last updated
Was this helpful?
Módulo 4
Last updated
Was this helpful?
Módulo a módulo se ha venido avanzando en las temáticas que nos permite contar con los conocimientos necesarios para empezar a trabajar sobre un SGBD y lograr la implementación de una base de datos, que se ha identificado y venido elaborando bajo la concepción de una serie de modelos, que nos ayudan a comprender la composición de le los artefactos que constituyen dicha base de datos. De este modo ya entramos a la fase 4, donde se debe realizar e implementar el modelo físico.
Este módulo tiene como propósito introducir al lector al Sistema de Gestión de Base de de Datos MySQL, entregándole los insumos de conocimiento que le permita realizar la implementación de una base de datos sobre dicho motor. Para efectos prácticos, este módulo se explicarán dos métodos para gestionar este motor de base de datos; de este modo los equipos de PPI y estudiantes tendrán diferentes opciones para poder desplegar y conectar la base de datos con los servicios que se deban integrar dentro del aplicativo que se debe desarrollar y entregar al finalizar el año.
De igual forma se realizará la instrucción a SQL y se verán algunos conceptos claves que nos permitan hacer uso de este leguaje para administrar y darle un buen uso a MySQL como motor de base de datos.
Antes de iniciar la temática de esta guía es importante establecer la diferencia entre bases de datos relacionales (SQL) y las bases de datos no relaciones (NoSQL), debido al alto crecimiento que han tenido las bases de datos no relacionales en los últimos años. Durante estos contenidos e a explicado ampliamente que es una base de datos relación, por lo cual primero estableceremos el concepto de bases de datos NoSQL.
Las bases de datos NoSQL están diseñadas específicamente para modelos de datos específicos y tienen esquemas flexibles para crear aplicaciones modernas. Las bases de datos NoSQL son ampliamente reconocidas porque son fáciles de desarrollar, por su funcionalidad y el rendimiento a escala. Este tipo de base de datos ofrece algunos aspectos de flexibilidad, escalabilidad, alto rendimiento y altamente funcionales. Veamos el siguiente cuadro donde podemos ver de manera puntual algunas diferencias entre estos dos tipos de bases de datos.
Bases de datos relacionales
Bases de datos NoSQL
Cargas de trabajo óptimas
Las bases de datos relacionales están diseñadas para aplicaciones de procesamiento de transacciones online (OLTP) altamente coherentes y transaccionales, y son buenas para el procesamiento analítico online (OLAP).
Las bases de datos NoSQL están diseñadas para varios patrones de acceso a datos que incluyen aplicaciones de baja latencia. Las bases de datos de búsqueda NoSQL están diseñadas para hacer análisis sobre datos semiestructurados.
Modelo de datos
El modelo relacional normaliza los datos en tablas conformadas por filas y columnas. Un esquema define estrictamente las tablas, las filas, las columnas, los índices, las relaciones entre las tablas y otros elementos de las bases de datos. La base de datos impone la integridad referencial en las relaciones entre tablas.
Las bases de datos NoSQL proporcionan una variedad de modelos de datos, como clave-valor, documentos y gráficos, que están optimizados para el rendimiento y la escala.
Propiedades ACID
Las bases de datos relacionales ofrecen propiedades de atomicidad, coherencia, aislamiento y durabilidad (ACID):
La atomicidad requiere que una transacción se ejecute por completo o no se ejecute en absoluto.
La coherencia requiere que una vez confirmada una transacción, los datos deban acoplarse al esquema de la base de datos.
El aislamiento requiere que las transacciones simultáneas se ejecuten por separado.
La durabilidad requiere la capacidad de recuperarse de un error inesperado del sistema o de un corte de energía y volver al último estado conocido.
Las bases de datos NoSQL a menudo hacen concesiones al flexibilizar algunas de las propiedades ACID de las bases de datos relacionales para un modelo de datos más flexible que puede escalar horizontalmente. Esto hace que las bases de datos NoSQL sean una excelente opción para casos de uso de baja latencia y alto rendimiento que necesitan escalar horizontalmente más allá de las limitaciones de una sola instancia.
Rendimiento
Normalmente, el rendimiento depende del subsistema de disco. Se necesita la optimización de consultas, índices y estructura de tabla para lograr el máximo rendimiento.
El rendimiento es, por lo general, depende del tamaño del clúster de hardware subyacente, la latencia de red y la aplicación que efectúa la llamada.
Escalado
Las bases de datos relacionales generalmente escalan en forma ascendente las capacidades de computación del hardware o la ampliación mediante la adición de réplicas para cargas de trabajo de solo lectura.
Las bases de datos NoSQL normalmente se pueden particionar porque los patrones de acceso son escalables mediante el uso de arquitectura distribuida para aumentar el rendimiento que proporciona un rendimiento constante a una escala casi ilimitada.
API
Solicita almacenar y recuperar datos que están comunicados mediante consultas que se ajustan a un lenguaje de consulta estructurado (SQL). Estas consultas son analizadas y ejecutadas por la base de datos relacional.
Las API basadas en objetos permiten a los desarrolladores almacenar y recuperar fácilmente estructuras de datos. Las claves de partición permiten que las aplicaciones busquen pares de clave-valor, conjuntos de columnas o documentos semiestructurados que contengan atributos y objetos de aplicación serializados.
Algunos motores de base de datos no relacionales que se encuentran hoy en el marcado y cuentan con mayor fama son: MongoDB, DynamoDB, Couchbase, Firebase, Cassandra, couchdb, SimpleDB, BigTable, Hbase, entre otros.
En conclusión, para responder a la pregunta:
¿Cuándo usar SQL en lugar de NoSQL?
¿Es mejor SQL que NoSQL?
Estas preguntas se deben mirar desde la óptica y los requisitos del proyecto sobre el que se esté trabajando. Por ejemplo, si los datos que se manejan dentro del aplicativa, tienen una alta relación y requieren una alta transaccionalidad, lo ideal es emplear una base de datos relacional o SQL. Pero si sus datos no están estructurados, son complejos, no puede predefinir su esquema y adicionalmente son volúmenes de información muy altos que deben ser constantemente consultados, será mejor optar por una base de datos no relacional.
Por lo anteriormente expuesto, es importante no apresurarnos a optar por un motor de base de datos, sin conocer sobre el tipo de proyecto sobre el cual se requiere implementar una solución de almacenamiento, además, sin conocer todo el espectro tecnológico que se ofrece hoy en día, con sus pro y contras que acarrea implementar una herramienta para el almacenamiento de la información.
Las siglas de SQL corresponden a la expresión inglesa Structured Query Language (entendida en español como Lenguaje de Consulta Estructurado), lenguaje mediante el cual se puede realizar la gestión de bases de datos de relacional que permite la especificación de distintas clases de operaciones, tales como: inserción, modificación, eliminación y proyección o selección de información. Gracias a la utilización del álgebra y de cálculos relacionales, SQL brinda la posibilidad de realizar operaciones bastante complejas de una manera sencilla, sobre la información que se encuentra almacenada en una base de datos.
Edgar Frank Codd (1923–2003), científico informático inglés que propuso un modelo relacional para las bases de datos y creó un sub lenguaje para acceder a los datos a partir del cálculo de predicados. En base al trabajo de Codd, IBM (International Business Machines) definió el lenguaje conocido como Structured English Query Language (SEQUEL).
SEQUEL se considera el antecesor de SQL, un lenguaje de cuarta generación que se estandarizó en 1986. La versión más primitiva de SQL, por lo tanto, fue la que se bautizó como SQL-86 (también conocida como SQL1).
En esencia, el SQL es un lenguaje declarativo de alto nivel ya que, ofrece una elevada productividad en la codificación y en la orientación a objetos en la información que se deben manejar al interior de una base de datos. Este lenguaje declarativo permite su integración con gran parte de los lenguajes de programación que conocemos hoy en día, tal como: PHP, JavaScript, Java, Python, C#, entre muchos otros. MariaDB, MySQL o SQL Server, por citar algunos ejemplos, trabajan de diferente manera, pero todos comparten un modo común de manipulación y consulta de datos a través del lenguaje SQL.
Dentro de SQL cohesionan algunos lenguajes para su correcto funcionamiento, que se definen a continuación:
Lenguaje de definición de datos, es el conjunto de instrucciones agrupadas que nos permite definir o modificar las estructuras que almacenarán los datos, así como los procedimientos y funciones que permitirán consultarlos.
Estas son las instrucciones que se agrupan en el DDL:
Operación
Definición
CREATE
Utilizado para crear objetos (tablas, vistas, índices) en la base de datos.
DROP
Utilizado para eliminar objetos en la base de datos, tal como: tablas, índices, vistas, etc
ALTER
Utilizado para modificar las tablas agregando o cambiando la definición de los campos.
TRUNCATE
Borra todo el contenido de una tabla
COMMENT
Agregar comentarios al diccionario de datos sobre un objeto de la base de datos.
RENAME
Renombrar la tabla de la base de datos
Lenguaje de Manipulación de Datos, permite llevar a cabo las tareas de consulta o modificación de los datos contenidos en la base de datos.
Operación
Definición
SELECT
Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado
INSERT
Utilizado para cargar lotes de datos en la base de datos, en una única operación
DELETE
Utilizado para eliminar registros de una tabla de una base de datos
UPDATE
Utilizado para modificar los valores de los campos y registros especificados
MERGE
Cuando se quiere actualizar/insertar datos de una tabla, actualiza cuando se cumple la condición e inserta cuando no se cumple
CALL
Para ejecutar un procedimiento en PL/SQL o Java
EXPLAIN PLAN
Nos permite analizar el plan de ejecución para poder optimizar la ejecución de las consultas
LOCK TABLE
Concurrencia de control, para controlar el flujo actual
Lenguaje de Control de Datos, permite controlar el acceso a los datos contenidos en la Base de Datos.
Operación
Definición
GRANT
Concede privilegios de acceso a los usuarios.
REVOKE
Suprime privilegios de acceso a los usuarios.
Lenguaje Control de Transacciones, usado para controlar las transacciones que se ejecutan en las bases de datos.
Operación
Definición
COMMIT
Finaliza la transacción y realiza los cambios hechos durante la transacción. Las transacciones bloqueadas sobre la tabla quedan liberadas.
ROLLBACK
Rechaza la transacción y no aplica cambios, volviendo al estado antes de iniciarse la transacción:
SAVEPOINT
Crea un punto en la transacción que se pueda volver mediante ROLLBACK.
SET TRANSACTION
Inicializa una transacción en la base de datos, indicando si quiere que sea de solo lectura o lectura/escritura.
Primero lo primero, tienes que saber cómo pronunciarlo: MY-ES-KYU-EL [maɪˌɛsˌkjuːˈɛl].
En cuanto a la historia y la transformación de MySQL se puede referenciar:
La compañía sueca MySQL AB originalmente desarrolló MySQL en 1994.
Sun Microsystems (empresa estadunidense), tomo el control sobre la empresa MySQL AB y con esta, sus productos.
El gigante de la tecnología estadounidense Oracle adquirió Sun Microsystems en el 2010 y MySQL ha sido propiedad de Oracle desde entonces.
MySQL es el sistema gestor de bases de datos relacional por excelencia y utilizado en la gran parte de las aplicaciones web actuales. Se ofrece bajo licencia GNU/GPL y es posible adquirir una versión licenciada por Oracle. Sus principales ventajas son:
Base de datos multihilo y multiusuario
Facilidad de uso y gran rendimiento
Facilidad para instalar y configurar
Soporte multiplataforma
Soporte SSL
Este sistema de gestión de bases de datos fue un derivado de MySQL, debido a los modelos de licencia que Oracle lleva imponiendo a su desarrollo desde la adquisición de Sun Microsystems. Esto hizo que la comunidad moviera sus esfuerzos en la creación de un desarrollo independiente.
Entre sus principales características se encuentran:
Aumento de motores de almacenamiento
Gran escalabilidad
Seguridad y rapidez en transacciones
Extensiones y nuevas características relacionadas con su aplicación para
Bases de datos NoSQL.
Para este curso no importa si se utiliza MySQL o MariaDB, debido a que ambos motores son muy similares (por no decir idénticos) en su manejo. Además, los fundamentos que se abordan en estas guías cubren de manera amplia e igualitaria la implementación en ambos motores de base de datos.
El proceso de solicitudes, dentro de una arquitectura de un aplicativo cliente servidor, para que llegue hasta el SGBD MySQL, se describe a continuación:
Uno o más dispositivos (cliente) pueden conectarse al servidor a través de una red.
Cada cliente puede realizar solicitudes desde una interfaz gráfica de usuario (FrontEnd).
Una vez la petición llega a un servidor de aplicaciones (BackEnd), la petición es resulta por un servidor que puede estar levantado en algún lenguaje de programación como Java, Php, JavaScript, etc (para estas guías debe ser JavaScript, mediante el framework Express).
Una vez la petición es atendida por el servidor de aplicaciones, se realiza una solicitud al SGBD que en este caso es MySQL y este resuelve la petición que inmersamente trae consigo las instrucciones para manipular los componentes de la base de datos.
De este modo el SGBD entrega una respuesta al servidor de aplicaciones y este formatea dicha respuesta en un formato claro para el cliente que realizo la solicitud.
Por último, la información y respuesta se le proyecta al usuario final.
Este software tiene diferentes componentes que facilitan la administración y el manejo de una base de datos y otros programas que se instalan con estas herramientas. De igual forma como esta herramienta, también existen otros softwares que son muy usados en el mercado, esta guía se enfocará en XAMPP.
XAMPP es una distribución de Apache completamente gratuita y fácil de instalar que contiene MariaDB, PHP y Perl. El paquete de instalación de XAMPP ha sido diseñado para ser increíblemente fácil de instalar y usar.
Los pasos necesarios para instalar XAMPP son los siguientes:
La instalación se realizará bajo Windows y la versión en la cual se encuentra disponible XAMPP al momento de realizar esta guía es la 7.4.9.
2. Una vez descargado el paquete, ejecutaremos el ejecutable. Posiblemente Windows nos preguntará si deseamos permitir cambios en nuestra máquina.
3. Si tenemos UAC (User Account Control) activado nos mostrará un mensaje como el de la siguiente captura. Deberemos modificar los permisos para que el software funcione.
4. Una vez podemos realizar la instalación nos saldrá la siguiente pantalla.
5. Dar clic sobre Next y nos aparecerán los diferentes componentes que deseamos instalar. No es necesario instalar todos, asegúrese de marcar minimante los siguientes elementos:
6. En el siguiente paso nos solicitará la ruta donde deseamos instalar todos nuestros paquetes. Por defecto la ruta donde lo instala es «c:\xampp\«.
7. Luego seleccionamos inglés, como el idioma en de instalación y uso.
8. Posteriormente, se da clic sobre Next que nos mostrará otra pantalla indicando si deseamos saber más sobre XAMPP, desmarcamos y clic sobre Next para que empiece al fin la instalación.
9. En algún momento de la instalación, el firewall de Windows nos preguntará si deseamos permitir conexiones del servidor Apache. Deberemos concederle los permisos correspondientes para poder funcionar.
10. Una vez llegado al final de la instalación nos preguntará si queremos iniciar el Panel de Control de XAMPP. Le decimos que si para iniciarlo.
11. Una vez iniciado observaremos una pantalla como la siguiente. Los servicios vendrán detenidos, así que para iniciarlos deberemos clic sobre Start.
12. Para comprobar el correcto funcionamiento de nuestro servidor Apache abriremos un navegador web y teclearemos http://localhost o https://localhost ya que por defecto vienen habilitados los puertos 80 y 443.
Es una herramienta de software gratuita escrita en PHP , destinada a manejar la administración de MySQL a través de la Web. phpMyAdmin admite una amplia gama de operaciones en MySQL y MariaDB. Las operaciones de uso frecuente (administración de bases de datos, tablas, columnas, relaciones, índices, usuarios, permisos, etc.) se pueden realizar a través de la interfaz de usuario, mientras aún tiene la capacidad de ejecutar directamente cualquier declaración SQL. Para ingresar, prevenidamente se debe tener instalado XAMPP o algún programa que cuente con esta herramienta y haber iniciado el servicio de apache y mysql.
Ha llegado el momento de crear nuestra primera base de datos, veamos como hacerlo desde la parte gráfica de nuestro cliente PhpMyAdmin.
1. Nos dirigimos a la sección “Bases de datos”.
2. Colocamos el nombre de la base de datos y el juego de caracteres, con el cual estará codificados los datos que se almacenará la información. Para el caso de nuestras bases de datos, se recomienda emplear utf8mb4_general_ci
2. Seleccione la base datos sobre la cual desea realizar cambios.
De igual forma se puede crear una base de datos ejecutando el siguiente comando.
Luego se le da clic en la opción continuar para que ejecute la instrucción.
Al crear una tabla la elección correcta de un formato de dato para cada columna de la tabla hará que nuestra base de datos tenga un rendimiento óptimo a medio largo plazo. Los tipos de datos se pueden clasificar en tres grandes grupos:
Numéricos
Cadena de texto
Fecha
Los siguientes, son tipos de dato numéricos en MySQL, su ocupación en disco y valores.
INT (INTEGER): Ocupación de 4 bytes con valores entre -2147483648 y 2147483647 o entre 0 y 4294967295.
SMALLINT: Ocupación de 2 bytes con valores entre -32768 y 32767 o entre 0 y 65535.
TINYINT: Ocupación de 1 bytes con valores entre -128 y 127 o entre 0 y 255.
MEDIUMINT: Ocupación de 3 bytes con valores entre -8388608 y 8388607 o entre 0 y 16777215.
BIGINT: Ocupación de 8 bytes con valores entre -8388608 y 8388607 o entre 0 y 16777215.
DECIMAL (NUMERIC): Almacena los números de coma flotante como cadenas o string.
FLOAT (m,d): Almacena números de coma flotante, donde ‘m’ es el número de dígitos de la parte entera y ‘d’ el número de decimales.
DOUBLE (REAL): Almacena número de coma flotante con precisión doble. Igual que FLOAT, la diferencia es el rango de valores posibles.
BIT (BOOL, BOOLEAN): Número entero con valor 0 o 1.
Listado de cada uno de los tipos de dato con formato de cadena de texto (string) en MySQL, su ocupación en disco y valores.
CHAR: Ocupación fija cuya longitud comprende de 1 a 255 caracteres.
VARCHAR: Ocupación variable cuya longitud comprende de 1 a 255 caracteres.
TINYBLOB: Una longitud máxima de 255 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúsculas y mayúsculas.
BLOB: Una longitud máxima de 65.535 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúsculas y mayúsculas.
MEDIUMBLOB: Una longitud máxima de 16.777.215 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúsculas y mayúsculas.
LONGBLOB: Una longitud máxima de 4.294.967.298 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúsculas y mayúsculas.
SET: Almacena 0, uno o varios valores una lista con un máximo de 64 posibles valores.
ENUM: Igual que SET pero solo puede almacenar un valor.
TINYTEXT: Una longitud máxima de 255 caracteres. Sirve para almacenar texto plano sin formato. Distingue entre minúsculas y mayúsculas.
TEXT: Una longitud máxima de 65.535 caracteres. Sirve para almacenar texto plano sin formato. Distingue entre minúsculas y mayúsculas.
MEDIUMTEXT: Una longitud máxima de 16.777.215 caracteres. Sirve para almacenar texto plano sin formato. Distingue entre minúsculas y mayúsculas.
LONGTEXT: Una longitud máxima de 4.294.967.298 caracteres. Sirve para almacenar texto plano sin formato. Distingue entre minúsculas y mayúsculas.
DATE: Válido para almacenar una fecha con año, mes y día, su rango oscila entre ‘1000-01-01′ y ‘9999-12-31′.
DATETIME: Almacena una fecha (año-mes-día) y una hora (horas-minutos-segundos), su rango oscila entre ‘1000-01-01 00:00:00′ y ‘9999-12-31 23:59:59′.
TIME: Válido para almacenar una hora (horas-minutos-segundos). Su rango de horas oscila entre -838-59-59 y 838-59-59. El formato almacenado es ‘HH:MM:SS’.
TIMESTAMP: Almacena una fecha y hora UTC. El rango de valores oscila entre ‘1970-01-01 00:00:01′ y ‘2038-01-19 03:14:07′.
YEAR: Almacena un año dado con 2 o 4 dígitos de longitud, por defecto son 4. El rango de valores oscila entre 1901 y 2155 con 4 dígitos. Mientras que con 2 dígitos el rango es desde 1970 a 2069 (70-69).
Partiendo del modelo relacional, establecido en el ejercicio de la guía anterior (módulo 3 de base de datos) “Colegio la Trinidad”, procederemos a crear una base de datos. Veremos los pasos gráficamente que se deben realizar en PhpMyAdmin para generar las tablas y se extraerá el script SQL que se va generando. En este ejercicio no se generarán las relaciones entre las tablas, de momento, solo se crearán las tablas, atributos y restricciones de llave primaria y datos nulos, que permitan ir insertando información sobre la base de datos que se construirá (estos conceptos se van a ir abordando en las próximas guías).
Para crear una tabla gráficamente, basta con seleccionar la base de datos donde se va a crear la nueva estructura de almacenamiento, darle el nombre a la tabla e indicar la cantidad de campos a crear y luego dar clic en el botón “Continuar”.
Luego se debe asignar cada uno de los nombres de los campos (columnas) donde se almacenará la información, el tipo de dato, la longitud de este, cuál o cuáles de estos campos son llaves primarias, entre otras propiedades que se van a ir aclarando en las siguientes temáticas. Adicionalmente, en la parte inferior esta el script que se genera de esta tabla (es recomendable ir pegándolo en un archivo dentro de tu proyecto). El script obtenido es el siguiente:
Al final contaremos con nuestra primera estructura o tabla, en la cual se podrá iniciar el proceso de cargar información.
Para la base de datos del ejercicio “Colegio La Trinidad”, complete las tablas faltantes para este ejercicio.
Cree una base de datos para el ejercicio COMPAÑÍA DE “BOTES EL PEÑOL”. También debe tener en cuenta para este ejercicio:
Almacene el script SQL, tal como se dejo propuesto en el ejercicio “Colegio la trinidad”.
Diseñe la base de datos del PPI con su equipo de trabajo, teniendo en cuenta los conceptos vistos durante esta guía (tenga en cuenta el script SQL).
Tabla que nos muestra un paralelo comparativo entre las bases de datos SQL vs NoSQL. Recuperado de .
1. Primero debemos ir a la web de XAMPP y descargar el paquete correspondiente. .
Para ingresar, solo se debe ingresar mediante la ruta . Si solicita contraseña y usuario, normalmente, el usuario es root y la contraseña es vacía.
El script de este ejercicio se puede visualizar en el siguiente repl