Nociones de Base de datos. MySQL como DBMS

Leonardo Jose Castillo Lacruz
11 min readOct 12, 2022

--

Empecemos por definir que es una base de datos. De acuerdo con el sitio web de oracle.com (Principal motor de base de datos SQL)

Una base de datos es una recopilación organizada de información o datos estructurados, que normalmente se almacena de forma electrónica en un sistema informático. Normalmente, una base de datos está controlada por un sistema de gestión de bases de datos (DBMS)

Un motor de base de datos o DBMS es un programa, dedicado a servir de intermediarios entre las bases de datos y las aplicaciones que las utilizan como función principal, cada uno de estos cumple una tarea especifica, que van desde crear la Base de Datos hasta administrar el uso y acceso a esta.

Conceptos claves de una base de datos

Cuando almacenamos datos, realizamos el modelado de estos, de forma tal que identifiquemos que valores hacen parte de una entidad de información. Una entidad de información es un conjunto de valores que permiten definir un objeto, ente o persona. Entonces cuando trabajamos con bases de datos, modelamos las entidades de información y sus relaciones, por ello hablamos de bases de datos relacionales.

La unidad mínima de datos que podemos manejar es el campo. Un campo es cada uno de los valores que vamos identificar, cada uno de ellos tiene un nombre que permite conocer la naturaleza del valor almacenado.

El conjunto de campos que permiten definir una entidad de información, lo denominamos tabla, entonces una tabla será uno o más campos que juntos representan un modelo.

L uego podemos estas tablas relacionarlas por alguno de los campos de esta forma, podemos tenemos modelos de información mucho más elaborados.

Cada representación de modelo se guarda en la tabla como una entrada o línea, esto lo denominamos registro entonces una tabla puede contener 0 a n registros.

Ejemplo de una base de datos relacional

Definamos una base de datos relacional simple, tomando como base el registro de empleados de una empresa. Empecemos por identificar las entidades de información:

  • Empleado. Datos personales y de contacto.
  • Información académica. Formación académica y profesional.
  • Proyectos a cargo. Proyectos en donde actúa el empleado.

De acuerdo a lo anterior, vamos a tener 3 tablas y estas se van a relacionar entre sí. Veamos como queda esta base de datos:

Modelo de base de datos a partir de la definición indicada

Vemos en el modelo anterior, que aunque definimos 3 entidades, tenemos 4 tablas, esto por qué sucede? Porque un proyecto puede tener N empleados relacionados, entonces se genera una nueva tabla para poder permitir la relación 1:N. Entonces tenemos relaciones 1:1, 1:N e N:M.

Como validamos si nuestras relaciones? Para ello aplicamos el concepto de normalización el cual se basa en aplicar 5 verificaciones claves que permiten validar las relaciones entre tablas y el modelado.

Cinco formas de normalización (FN: Forma normal)

1FN: Eliminar grupos repetitivos
2FN: Eliminar datos redundantes
3FN: Eliminar columnas no depende de clave
4FN: Aislar Relaciones Múltiples Independientes
5FN: Aislar relaciones semánticamente relacionadas múltiples.

En enlace podrás profundizar sobre este tema.

Implementando una base de datos

Para construir una base de datos, vamos a necesitar de un motor o DBMS, en este caso vamos a usar MySQL, este es uno de los motores que dominan el mercado actualmente en cuanto a base de datos relacionales.

Si estas en Windows, en el tema de base de backend explicamos como instarlo mediante alguno de los paquetes que incluyen lo necesario para montar un servidor de desarrollo.

Si estas en Linux o Mac, debes realizar la instalación de algun gestor de paquetes o desde la consola. En el caso de Linux, en distribución Ubuntu o Debian, simplemente debemos ejecutar el siguiente comando:

sudo apt install mysql

Luego de instalado el motor de base de datos, podemos verificar que está correctamente instalado, ejecutando el comando:

mysql --version

En Windows podemos verificar si está instalado correctamente, accediendo al Panel de Control, Servicios y verificando si está activo y en ejecución el servicio de MySQL.

Si desea profundizar más en cuanto a la instalación de MySQL, puedes acceder a la documentación oficial en este enlace.

Como podemos realizar operaciones sobre una base de datos? Estas operaciones se realizan a través del motor o DBMS y la comunicación es en base al lenguaje SQL.

Qué es SQL?

SQL viene de Structure Query Language, que en español podemos traducirlo como Lenguaje de consulta estructurado. Es el lenguaje que nos permite realizar operaciones sobre una base de datos. SQL tiene un conjunto de comandos que permite realizar las operaciones necesarias para manipular y administrar base de datos, tablas, campos, registros.

Creación de una base de datos:

CREATE DATABASE nombre;

Mediante el comando anterior, va a ser creada una base de datos con el nombre que coloquemos dentro de nombre

Ejemplo en nuestro caso vamos a crear una base de datos llamada crud entonces el comando será:

CREATE DATABASE crud;

Luego de esto ya podemos acceder a la base de datos a través del siguiente comando:

USE crud;

A partir de este momento cualquier comando que realicemos, será sobre la base de datos seleccionada.

Tipo de datos en campos:

Cuando definimos la estructura de la base de datos, debemos identificar para cada campo, cual va a ser el tipo de valor o de datos que va almacenar, tenemos datos numéricos, alfanuméricos, binarios, conjuntos, fecha, fecha y hora, entre los más usados. Como se nombra o llaman cada tipo de dato va a depender del motor o DBMS, pero en general los términos para llamarlos son similares. En el caso de MySQL tenemos los siguientes tipos de datos:

Los tipos de datos en MySQL se pueden clasificar en tres grandes grupos.

Datos numéricos

  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INTEGER
  • BIGINT
  • DECIMAL
  • NUMERIC
  • FLOAT
  • DOUBLE

Datos cadenas

  • CHAR
  • VARCHAR
  • BINARY
  • VARBINARY
  • TINYBLOB
  • TINYTEXT
  • BLOB
  • TEXT
  • MEDIUMBLOB
  • MEDIUMTEXT
  • LONGBLOB
  • LONGTEX
  • ENUM
  • SET

Datos fechas y horas

  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

Tipos de datos numéricos

Los datos numéricos corresponden a datos expresados en números. Por ejemplo, la edad, cantidad de personas de una población, el precio de un producto, tipo de cambio de una moneda, etc. Escoger cuál tipo de dato es el más adecuado al momento de crear los campos dependerá del análisis previo realizado.

Los tipos de datos numéricos se dividen en dos grupos: datos numéricos enteros y datos numéricos decimales.

Numéricos enteros

Los datos numéricos enteros son aquellos que carecen de un punto decimal. Las opciones que tenemos para almacenar este tipo de datos, son:

TINYINT

Bytes: 1, valor con signo mínimo — máximo: -128 a 127, valor sin signo: 0 a 255

SMALLINT

Bytes: 2, valor con signo mínimo — máximo: -32768 a 32767, valor sin signo: 0 a 6553

MEDIUMINT

Bytes: 3, valor con signo mínimo — máximo: -8388608 a 8388607, valor sin signo: 0 a 16777215

INTEGER

Bytes: 4, valor con signo mínimo — máximo: -2147483648 a 2147483647, valor sin signo: 0–4294967295

BIGINT

Bytes: 8, valor con signo mínimo — máximo: -2⁶³ a 2⁶³, valor sin signo: 0–2⁶⁴

Numéricos reales

Los datos numéricos decimales están compuestos por una parte entera y otra decimal. Las opciones que tenemos para almacenar este tipo de datos, son las siguientes:

DECIMAL

Definir con precisión muy exacta. Números significativos. No se debe perder de vista la exactitud.

NUMERIC

Definir con precisión muy exacta. Números significativos. No se debe perder de vista la exactitud.

FLOAT

Precisión simple, la exactitud no tiene mucha relevancia. Rango de precisión entre 0 y 24.

DOUBLE

Precisión doble, la exactitud no tiene mucha relevancia. Rango de precisión entre 25 y 53.

Tipos de datos cadenas

Los datos de tipo cadena representan datos alfanuméricos que pueden incluir letras, números, espacios y caracteres especiales. Las opciones con las que se cuenta son:

CHAR

El tipo de dato CHAR almacena una cadena de datos de longitud fija de hasta 255 caracteres, que se reserva en la memoria, aunque no se la utilice toda.

VARCHAR

VARCHAR almacena la misma cantidad de caracteres que CHAR de 255 caracteres, pero la longitud es variable. La longitud dependerá del contenido que se almacena en la memoria. Por ejemplo, el texto “Framework” consumirá diez caracteres, nueve para las letras y uno para la longitud del texto.

BINARY

BINARY es similar a los tipos de datos CHAR y VARCHAR, la diferencia radica en que no almacena caracteres sino bytes. Asimismo la diferencia con VARBINARY radica en la cantidad de bytes que almacena.

BLOB

Los datos de tipo BLOB guardan información en formato binario de gran tamaño, generalmente se utiliza este tipo de datos para guardar imágenes, sonido y archivos. Las diferencias de TYNYBLOB, MEDIUMBLOB y LONGBLOB se diferencian por la cantidad máxima de almacenamiento.

TINYBLOB

Longitud máxima en Bytes: 255

BLOB

Longitud máxima en Bytes: 65535

MEDIUMBLOB

Longitud máxima en Bytes: 16777215

LONGBLOB

Longitud máxima en Bytes: 4 GB

TEXT

TEXT es utilizado para guardar cualquier tipo de texto de gran tamaño, bajo este formato se pueden almacenar blogs enteros, noticias, comentarios, publicaciones, etc. Las diferencias entre TINYTEXT, MEDIUMTEXT y LONG TEXT es la cantidad de caracteres.

TINYTEXT

Longitud máxima en Bytes: 255

TEXT

Longitud máxima en Bytes: 65535

MEDIUMTEXT

Longitud máxima en Bytes: 16777215

LONGTEXT

Longitud máxima en Bytes: 4294967295

ENUM

ENUM (enumeración) es un tipo de datos especial que se utiliza para definir valores predeterminados de una lista, los cuales deben estar separados por comas (solo estos valores son permitidos en el campo al momento de ingresar el dato). Se puede almacenar hasta 65535 valores diferentes.

SET

SET es un tipo de dato que representa un conjunto de cadenas que puede contener 1 ó más valores, similar a EMUN con la diferencia que se puede almacenar más de un valor en el campo.

Tipo de datos fechas y horas

Los tipos de datos de fechas y horas representan un periodo determinado en el tiempo. Las opciones con las que se cuenta son:

DATE

DATE es un tipo de dato que permite almacenar fechas en el formato “YYYY-MM-DD”, donde YYYY representa el año, MM representa el mes y DD representa el día. Permite almacenar fechas en un rango de 1000–01–01 a 9999–12–31.

TIME

TIME es similar a DATE pero sirve para almacenar horas, minutos y segundos; el formato es “HH:MM:SS” donde HH representa la hora, MM los minutos y SS los segundos.

DATETIME

DATETIME es un tipo de dato que nos permite registrar con exactitud un determinado periodo de tiempo, almacena las fechas y horas. El formato es “YYYY-MM-DD HH:MM:SS”.

TIMESTAMP

TIMESTAMP es un tipo de dato similar a DATETIME con la diferencia de que el rango de fechas utilizado es el presente (desde 1970–01–01 hasta 2037–12–31). Cuenta con tres tipos de formato “YYYY-MM-DD HH:MM:SS”, “YYYY-MM-DD” y “YY-MM-DD”.

Hasta aquí la clase Tipos de datos en MySQL, si tienes alguna duda déjanos un comentario y con gusto te responderemos. En la siguiente clase veremos cómo crear tablas en MySQL.

Información tomada del site: https://norvicsoftware.com/tipos-de-datos-en-mysql/

Vamos ahora a crear nuestras tablas, para ello vamos a emplear el comando:

CREATE TABLE nombre_tabla (...);

En nuestro modelo que definimos, tenemos 4 tablas, sigue el script (así se denomina a un conjunto de comandos en SQL) que permite crear las 4 tablas.

-- ----------------------------------------------------------
-- Estructura de tabla para la tabla `empleado`
--
CREATE TABLE `empleado` (
`dni` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
`nombre` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
`apellido` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
`direccion` text COLLATE utf8mb4_general_ci NOT NULL,
`email` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`telefono` varchar(32) COLLATE utf8mb4_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------------------------------------
-- Estructura de tabla para la tabla `formacion_academica`
--
CREATE TABLE `formacion_academica` (
`dni` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
`titulo` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`fecha` date NOT NULL,
`instituto` varchar(32) COLLATE utf8mb4_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------------------------------------
-- Estructura de tabla para la tabla `proyectos`
--
CREATE TABLE `proyectos` (
`id_proyecto` int NOT NULL,
`nombre` varchar(128) COLLATE utf8mb4_general_ci NOT NULL,
`descripcion` text COLLATE utf8mb4_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------------------------------------
-- Estructura de tabla para la tabla `proyectos_empleados`
--
CREATE TABLE `proyectos_empleados` (
`dni` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
`id_proyecto` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Luego de crear las tablas, debemos conocer el concepto de llaves, que son las que nos permiten primero hacer más eficiente el proceso de gestión de datos y luego permiten validar nuestras relaciones.

Tipos de claves que podemos definir:

  • Clave primaria: una clave primaria es un campo o una combinación de campos que identifican de manera única un registro de una tabla. Estas no pueden contener valores nulos y su valor debe ser único.
  • Clave foránea: Una clave foránea es una columna o un conjunto de columnas en una tabla cuyos valores corresponden a los valores de la clave primaria de otra tabla. Para poder añadir una fila con un valor de clave foránea específico, debe existir una fila en la tabla relacionada con el mismo valor de clave primaria.

En nuestro caso debemos definir claves primarias aquellos campos que identifican los registros de manera única, entonces en empleados tenemos el campo dni (documento nacional de identidad) y el caso de proyecto le generamos un id único llamado id_proyecto.

Operaciones sobre registros:

Los registros en las tablas pueden ser insertados, actualizados y borrados. Para ellos tenemos 3 comandos que realizan esas acciones:

Inserción de registros. Para ello usamos el comando:

INSERT INTO tabla (campo,campo,...) VALUES (valor,valor,...);

Los valores deben ir entre comillas simples para el caso de campos diferente de números (texto, fechas, por ejemplo)

Actualización de registro. Usamos el siguiente comando:

UPDATE tabla SET campo = valor, campo = valor WHERE campo_condicion = valor_condicion AND ... OR ...

En el caso de la actualización, definimos que campos queremos cambiar y luego decimos que condición deben cumplir los registros que queremos cambiar, eso es lo que está luego de la palabra WHERE . Notese que para colocar 2 o más condiciones podemos usar los operadores lógicos AND, OR y NOT

Borrado de registro. Se realiza con el siguiente comando:

DELETE FROM table WHERE WHERE campo_condicion = valor_condicion AND ... OR ...

Cuando borramos, solo decimos que condición deben cumplir los registros que queremos borrar, eso es lo que está luego de la palabra WHERE . Acá también es posible colocar 2 o más condiciones, usanado los operadores lógicos AND, OR y NOT

Consulta de registros:

Para hacer una consulta usamos el comando:

SELECT campo1, campo2, campo3, ... FROM tabla WHERE campo_condicion = valor_condicion AND ... OR ...

Con el comando anterior estamos seleccionando campos de una sola tabla, colocando condiciones, ahora bien, también es posible consultar campos de 1 o más tablas, donde la condición se cumpla en 1 o más tablas, en ese caso estaremos haciendo uso de las relaciones entre tablas, por ello la importancia de una buena definición.

Para hacer una consulta con múltiples tablas que estén relacionadas, usamos además del comando anterior, la palabra reservada JOIN , entonces una consulta relacional será de esta forma:

SELECT campo1, campo2, campo3, ... FROM tabla1 JOIN tabla2 ON (campo_tabla1 = campo_tabla2 AND ... OR ...) WHERE campo_condicion = valor_condicion AND ... OR ...

En el ejemplo anterior estamos usando 2 tablas y con la palabra reservad JOIN y la condición usando la palabra reservada ON relacionamos las tablas: tabla1 y tabla2.

Tipos de JOIN

Existen diferentes formas de relacionar una tabla, ejemplo:

  • Que esté en tabla1 y en la tabla2. Se usa INNER JOIN
  • Que esté en tabla1 y puede que esté o no en la tabla2. Se usa LEFT OUTER JOIN
  • Puede que esté en tabla1 y pero debe estar en la tabla2. Se usa RIGHT OUTER JOIN
  • Queremos todo esten o no relacionados, se usa FULL JOIN

Acá en modo gráfico como son las relaciones, para mejor entendimiento:

Tipos de Join

--

--

Leonardo Jose Castillo Lacruz
Leonardo Jose Castillo Lacruz

Written by Leonardo Jose Castillo Lacruz

Desarrollador de software desde 1998. Apasionado por la tecnología. Descubriendo que cuando enseñas aprendes mucho más

Responses (1)