Cada vez que vas a un lugar te solicitan tus datos en algún comercio o establecimiento, los recopilan para poder realizar distintas operaciones con esta información. Por ejemplo, cuando te solicitan tu correo electrónico es para enviarte publicidad y mantenerte informado de las últimas ofertas en el establecimiento comercial, pero ¿te imaginas como pueden administrar la información de tantas personas?
Pues esto lo realizan a través una base de datos y un programa que la gestiona que se llama manejador de base datos. En este tema aprenderás como diseñar y manipular las bases de datos relacionales con MySQL, que es el manejador de base de datos o, por sus siglas en inglés, DBMS.
Oracle (s.f.) define una base de datos como una recopilación organizada de información o datos estructurados que normalmente se almacena de forma electrónica en un sistema informático.
Existen diferentes tipos de base de datos. Estos son algunos tipos (Oracle, s.f.):
Figura 1. Tipos de bases de datos.
Las bases de datos requieren de un programa para gestionarlas, este también es conocido como manejador de base de datos (DBMS).
Diseño y estructura de una base de datos
El diseño y la estructura de una base de datos es fundamental en el desarrollo de un sistema de información. Para realizar el diseño te puedes apoyar en varios modelos como el modelo jerárquico, en red, entidad-relación, orientado por objetos, documental, etc. En este tema abordaremos el modelo entidad-relación por ser uno de los más comunes en la industria del software.
El modelo entidad-relación es simple y explícito, permite expresar una notación gráfica de la base de datos. Los elementos que conforman un diagrama entidad relación son los siguientes:
Figura 2. Elementos de un diagrama entidad relación.
En resumen, las tablas que conforman la base de datos son llamadas entidades, los datos dentro de las tablas son los atributos y las conexiones entre las tablas son las relaciones.
Las entidades y sus atributos se representan gráficamente de la siguiente forma:
Figura 3. Representación gráfica de una entidad y un atributo.
La relación que existe entre dos entidades puede variar de acuerdo con la cantidad. Por ejemplo, un alumno puede estar relacionado a varias asignaturas, es decir, tiene una relación “uno a muchos”, a esto se le llama cardinalidad. Existen diferentes notaciones para expresar gráficamente la cardinalidad, la más común es la notación de patas de gallo que se representa por medio de los símbolos:
Figura 4. Representación gráfica de cardinalidad en notación de patas de gallo.
Lenguaje de Consulta Estructurada (structured query language)
“El SQL es un lenguaje de programación que utilizan casi todas las bases de datos relacionales para consultar, manipular y definir los datos, además de para proporcionar control de acceso” (Oracle, s.f.).
En SQL, las sentencias principales se dividen en dos categorías:
La sentencia CREATE se usa para crear objetos como bases de datos, tablas, funciones, vistas, procedimientos almacenados, índices, etcétera.
CREATE TABLE personas( id int(11), nombre varchar(100), apellido varchar(50), direccion varchar(500), telefono varchar(20), email varchar(50) ); |
Tabla 1. Sentencia CREATE.
La sentencia ALTER sirve para alterar los objetos de la base de datos.
ALTER TABLE personas MODIFY email varchar(100);
ALTER TABLE personas ADD edad int; |
Tabla 2. Sentencia ALTER.
La sentencia DROP se necesita para eliminar cualquier objeto en la base de datos.
DROP TABLE personas; |
Tabla 3. Sentencia DROP.
La sentencia TRUNCATE se usa para eliminar los registros dentro de la base de datos. A diferencia de la sentencia anterior, esta no elimina el objeto.
TRUNCATE TABLE personas; |
Tabla 4. Sentencia TRUNCATE.
La sentencia SELECT se requiere para seleccionar los datos de una tabla.
SELECT * FROM personas; |
Tabla 5. Sentencia SELECT.
La sentencia INSERT se usa para insertar datos en una tabla.
INSERT INTO personas ( id, nombre, apellido, direccion, telefono, email, edad ) VALUES ( 1, 'Enrique', 'Suarez', 'Principal 2, Mexico', '5512345678', 'enriquesuarez@mail.com', 20); |
Tabla 6. Sentencia INSERT.
La sentencia DELETE se necesita para eliminar los datos en una tabla.
DELETE FROM personas; |
Tabla 7. Sentencia DELETE.
La sentencia UPDATE se usa para actualizar los datos en una tabla.
UPDATE personas SET nombre = 'Enrique Gonzalez'; |
Tabla 8. Sentencia UPDATE.
Para que las sentencias DML puedan dar datos más precisos en la manipulación de los datos, existen cláusulas, que son condiciones que se agregan a las sentencias para optimizar las consultas. Las cláusulas más comunes son las siguientes:
Cláusula que sirve para delimitar los datos que manipularán. En el siguiente ejemplo se muestra la consulta a una tabla y únicamente devolverá los datos que cumplan con la condición.
Para esta cláusula en particular es necesario usar los operadores relacionales que vinculan un campo con un valor para que sea comparado. Son los siguientes:
Figura 5. Operadores relacionales en MySQL.
Y se ocupan de la siguiente manera:
SELECT * FROM personas WHERE edad > 18; |
Tabla 9. Ejemplo de cláusula WHERE.
Cláusula que sirve para quitar los duplicados en una tabla, es decir, si deseas visualizar los datos de una columna sin que se repitan.
SELECT DISTINCT nombre FROM personas; |
Tabla 10. Ejemplo de cláusula DISTINCT.
Cláusula que sirve para ordenar los datos en base a una columna de la tabla. Se pueden ordenar de forma ascendente (ASC) o descendiente (DESC).
SELECT * FROM personas ORDER BY nombre ASC;
SELECT * FROM personas ORDER BY edad DESC; |
Tabla 11. Ejemplo de la cláusula ORDER BY.
Cláusula que sirve para agrupar los datos por una o más columnas. Junto con esta cláusula se pueden ocupar los operadores analíticos estadísticos como los siguientes:
Figura 6. Operadores analíticos en MySQL.
Y se pueden ocupar como se muestra a continuación:
SELECT edad, COUNT(*) FROM personas GROUP BY edad; |
Tabla 12. Ejemplo de la cláusula GROUP BY.
Cláusula que se ocupa junto con la cláusula GROUP BY para validar una condición.
SELECT edad, COUNT(*) FROM personas GROUP BY edad HAVING edad > 18; |
Tabla 12. Ejemplo la cláusula HAVING.
También existen los operadores lógicos, que permiten que agregar más de una condición a las cláusulas. Los operadores lógicos son los siguientes:
SELECT * FROM personas WHERE edad > 18 AND edad < 40;
SELECT * FROM personas WHERE nombre = 'Juan' OR nombre ='Maria'; |
Tabla 13. Ejemplo de operadores lógicos.
Integridad referencial
En MySQL se pueden unir dos tablas por medio de alguno de sus campos y el campo por el cual se unen deben existir en ambas tablas, de tal manera que exista una congruencia entre los campos; a esto se le llama integridad referencial.
Para que exista la integridad referencial en una base de datos deben existir llaves que serán las que protegerán la congruencia en la base de datos.
Existen dos tipos de llaves:
Figura 7. Tipos de llaves.
El manual de referencia de MySQL (2021) dice que se debe tener en cuenta que las claves foráneas en SQL se usan para chequear y forzar integridad referencial, no para unir tablas.
Índices
Los índices se utilizan para localizar los registros de una forma más rápida. “La mejor manera de mejorar el rendimiento de las operaciones SELECT es crear índices en una o más de las de las columnas que se comprueban en la consulta” (MySQL, 2021).
Haciendo una analogía, cuando tú buscas un tema en específico en un libro, buscas en su tabla de contenido o índice para encontrar el tema más rápido e ir directamente a la página en donde se encuentra. Funciona igual en los índices de las bases de datos, nos sirven para optimizar las búsquedas. “Las entradas de los índices actúan como punteros a las filas de la tabla, permitiendo la consulta determinar rápidamente qué filas coinciden con una condición en la cláusula WHERE y recuperar los otros valores de columna para esas filas. Todos los tipos de datos de MySQL pueden ser indexados” (MySQL, 2021)
Para crear un índice en una tabla existente se hace modificando la tabla y agregando el índice.
ALTER TABLE personas ADD INDEX idx_nombre (nombre); |
Tabla 14. Creación de un índice en una tabla existente.
Si deseas eliminar algún índice, de igual forma modificas la tabla, pero en lugar de agregar, eliminas con la sentencia DROP.
ALTER TABLE personas DROP INDEX idx_nombre; |
Tabla 14. Eliminar un índice.
En caso de que quieras visualizar los índices que posee una tabla, lo realizas con la sentencia SHOW.
SHOW INDEX FROM personas; |
Tabla 14. Visualizar los índices de la tabla.
En un mundo en donde la tecnología es parte del día a día, la información es el pilar fundamental y las bases de datos son los contenedores de datos que se convierten en herramientas poderosas si las sabemos manipular. Las bases de datos deben ser fácilmente legibles y ordenadas. Eso se logra gracias a los gestores de bases de datos o DBMS, por sus siglas en inglés. Uno de los más utilizados es MySQL que nos ofrece las ventajas de la administración de bases relacionales.
Los principales componentes de MySQL son los siguientes:
Figura 8. Componentes DDL.
Figura 9. Componentes DML.
Asegúrate de: