1 Bachillerato SA2 Bases de Datos

Conceptos básicos de bases de datos

¿Qué es una base de datos?

Una base de datos es un conjunto organizado de datos que permite su almacenamiento, gestión y recuperación de forma eficiente. Se utiliza para almacenar información estructurada en empresas, aplicaciones y sitios web.

¿Por qué son importantes las bases de datos?

Las bases de datos permiten:

  • Guardar grandes volúmenes de información.
  • Acceder a los datos de forma rápida y segura.
  • Evitar redundancia y pérdida de información.
  • Gestionar la información de manera eficiente en aplicaciones.

Ejemplos de bases de datos en la vida cotidiana

Existe multitud de ejemplos de uso de bases de datos en nuestro día a día.

  • Redes sociales (Instagram, Facebook, Twitter)
    • Almacenan perfiles de usuarios, publicaciones, comentarios y reacciones en bases de datos relacionales.
  • Plataformas de streaming (Netflix, Spotify, YouTube)
    • Guardan información sobre usuarios, historiales de reproducción y preferencias para recomendar contenido.
  • Tiendas en línea (Amazon, eBay, Mercado Libre)
    • Registran productos, clientes, pedidos y pagos en bases de datos relacionales o NoSQL.
  • Centros educativos (bases de datos escolares)
    • Guardan datos de alumnos, notas, asignaturas y profesores en bases de datos relacionales.
  • Hospitales y clínicas
    • Gestionan historiales médicos, citas y recetas médicas de los pacientes.

Las bases de datos son esenciales en la gestión y almacenamiento de información en diversos ámbitos, desde aplicaciones empresariales hasta redes sociales y sistemas de salud. Se pueden clasificar en diferentes tipos según su estructura y forma de organizar los datos. Las principales categorías son bases de datos relacionales y no relacionales.

Bases de datos relacionales vs. no relacionales

Bases de datos relacionales

Las bases de datos relacionales organizan los datos en tablas, donde cada fila representa un registro y cada columna un campo con un tipo de dato específico. Este modelo se basa en las matemáticas relacionales y permite definir relaciones entre diferentes tablas a través de claves primarias y foráneas. Son utilizadas en sistemas donde la integridad de los datos y la normalización son fundamentales.

Las bases de datos relacionales emplean el lenguaje SQL (Structured Query Language) para la gestión de los datos, permitiendo realizar consultas, inserciones, actualizaciones y eliminaciones de manera eficiente.

Ejemplos de bases de datos relacionales:

  • MySQL: Uno de los sistemas más populares, ampliamente utilizado en aplicaciones web y de gestión empresarial.

  • PostgreSQL: Base de datos avanzada con soporte para operaciones complejas y extensibilidad.

  • SQLite: Base de datos ligera, utilizada en aplicaciones móviles y software embebido.

  • Oracle Database: Utilizada en entornos corporativos por su robustez y seguridad.

  • SQL Server: Desarrollada por Microsoft, utilizada en aplicaciones empresariales.

Bases de datos no relacionales

Las bases de datos no relacionales, también conocidas como NoSQL, no organizan los datos en tablas, sino en estructuras más flexibles como documentos, grafos, columnas o claves-valor. Estas bases de datos son ideales para manejar grandes volúmenes de información no estructurada y permiten escalabilidad horizontal.

A diferencia de las bases de datos relacionales, NoSQL no requiere un esquema fijo, lo que las hace más dinámicas para ciertos tipos de aplicaciones, como redes sociales, análisis de datos y almacenamiento en la nube.

Ejemplos de bases de datos no relacionales:

  • MongoDB: Usa un modelo basado en documentos JSON, ideal para aplicaciones web y Big Data.

  • Firebase: Plataforma de Google que ofrece una base de datos en tiempo real, utilizada en desarrollo de apps móviles.

  • Redis: Base de datos en memoria tipo clave-valor, utilizada para almacenamiento en caché y procesamiento rápido de datos.

  • Cassandra: Base de datos distribuida diseñada para manejar grandes volúmenes de datos en múltiples servidores.

El modelo relacional es el más utilizado en bases de datos debido a su estructura clara y facilidad para organizar la información de manera eficiente. Se basa en la relación entre datos organizados en tablas, permitiendo consultas y operaciones complejas con integridad referencial.

Estructura de una base de datos relacional

Las bases de datos relacionales están compuestas por los siguientes elementos principales:

  • Tablas: Son el elemento básico del modelo relacional. Cada tabla almacena información sobre un conjunto de elementos similares, como clientes, productos o pedidos.
  • Registros (filas): Cada fila dentro de una tabla representa un conjunto de datos relacionados sobre un solo elemento.
  • Campos (columnas): Cada columna representa un atributo específico del registro, como el nombre, la edad o la dirección.

Ejemplo de una tabla de «Alumnos»:

Id_AlumnoNombreEdadCurso
1Juan181º Bachillerato
2María171º Bachillerato
3Pedro181º Bachillerato

Conceptos clave

  • Clave primaria (Primary Key): Es un campo o conjunto de campos que identifican de manera única cada registro dentro de una tabla. Por ejemplo, en la tabla de alumnos, el ID_Alumno sería la clave primaria.

  • Clave foránea (Foreign Key): Es un campo que establece una relación entre dos tablas. Permite vincular información de una tabla a otra.

Relaciones entre tablas

Las bases de datos relacionales permiten establecer relaciones entre diferentes tablas, lo que facilita la organización de los datos y evita redundancias. Existen tres tipos principales de relaciones:

  1. Uno a uno: Un registro de una tabla se asocia con un solo registro de otra tabla. Ejemplo: Un usuario y su perfil de configuración.

  2. Uno a muchos: Un registro de una tabla se relaciona con varios registros de otra. Ejemplo: Un profesor puede tener muchos alumnos, pero cada alumno tiene un solo profesor asignado.

  3. Muchos a muchos: Varios registros de una tabla se relacionan con varios de otra. Ejemplo: Los estudiantes pueden inscribirse en varios cursos, y cada curso puede tener varios estudiantes.

Estas relaciones se implementan mediante el uso de claves primarias y foráneas, asegurando la integridad de los datos y evitando la duplicidad de información.

Con esta estructura, las bases de datos relacionales permiten gestionar grandes volúmenes de información de manera eficiente y organizada, siendo una de las herramientas fundamentales en el mundo de la informática y la gestión de datos.

SQL (Structured Query Language) es el lenguaje utilizado para gestionar bases de datos relacionales.

Principales comandos SQL

Consulta de datos:

Inserción de datos:

Actualización de datos:

Eliminación de datos:

Creación de tablas:

Cada campo de una tabla guardará información. Esta información será de un tipo concreto, por ejemplo, número, texto, etc. Veamos en este apartado los diferentes tipos de datos que podemos usar en SQL.

Tipos de Datos Numéricos

Los tipos de datos numéricos se utilizan para almacenar valores enteros o decimales. Se dividen en dos grandes categorías: números enteros y números con decimales.

Los números enteros incluyen tipos como TINYINT, SMALLINT, MEDIUMINT, INT y BIGINT. La diferencia principal entre ellos es la cantidad de almacenamiento que requieren y el rango de valores que pueden contener. Por ejemplo, un TINYINT solo puede almacenar valores entre -128 y 127 (o de 0 a 255 si se usa sin signo), mientras que un BIGINT permite números extremadamente grandes, útiles para manejar identificadores únicos en bases de datos con millones de registros.

Por otro lado, los números decimales incluyen FLOAT, DOUBLE y DECIMAL. FLOAT y DOUBLE son tipos de punto flotante, lo que significa que almacenan valores con decimales pero con una precisión variable, lo que puede llevar a pequeñas imprecisiones en cálculos matemáticos. DECIMAL (o NUMERIC) es la mejor opción cuando se necesita precisión exacta, como en cálculos financieros.

  • Enteros:
    • TINYINT (1 byte, -128 a 127 o 0 a 255 sin signo)
    • SMALLINT (2 bytes, -32,768 a 32,767)
    • MEDIUMINT (3 bytes, -8,388,608 a 8,388,607)
    • INT o INTEGER (4 bytes, -2,147,483,648 a 2,147,483,647)
    • BIGINT (8 bytes, valores muy grandes)
  • Decimales:
    • FLOAT (4 bytes, precisión menor)
    • DOUBLE o REAL (8 bytes, mayor precisión)
    • DECIMAL o NUMERIC (precisión exacta, se define la cantidad de decimales)

Ejemplo de tabla con números enteros y decimales:

En este ejemplo, el campo precio usa DECIMAL(10,2), lo que significa que puede almacenar hasta 10 dígitos en total, con 2 de ellos reservados para los decimales. Esto garantiza precisión al manejar precios. SMALLINT se usa para representar el stock, lo que ahorra espacio en comparación con un INT si no se esperan valores grandes.

Tipos de Datos de Texto

SQL proporciona varios tipos de datos para almacenar texto, dependiendo de la cantidad de caracteres y el propósito.

El tipo VARCHAR(n) es el más utilizado para almacenar cadenas de texto con una longitud variable, lo que significa que solo ocupará el espacio necesario en la base de datos. En contraste, CHAR(n) almacena cadenas con una longitud fija, por lo que si el texto tiene menos caracteres de los definidos, el campo rellenará el espacio con espacios en blanco. CHAR es más eficiente cuando todos los valores tienen la misma longitud, como códigos de país o números de identificación.

Para textos más largos, SQL ofrece el tipo TEXT, que permite almacenar grandes volúmenes de texto, como descripciones o artículos. Sin embargo, los campos TEXT no pueden ser indexados completamente, lo que puede afectar el rendimiento en búsquedas.

SQL también tiene ENUM y SET, que permiten almacenar valores predefinidos. ENUM es útil cuando un campo debe contener un solo valor de una lista, como «Activo», «Inactivo» o «Pendiente». SET es similar, pero permite seleccionar múltiples valores de la lista.

  • CHAR(n): Tamaño fijo (1 a 255 caracteres).
  • VARCHAR(n): Tamaño variable (1 a 65,535 caracteres, depende del motor).
  • TEXT: Para grandes cantidades de texto (hasta 4 GB según el tipo).
  • ENUM: Lista predefinida de valores (ej. ‘Activo’, ‘Inactivo’).
  • SET: Conjunto de valores predefinidos (puede contener múltiples valores).

En este caso, VARCHAR(50) almacena nombres de hasta 50 caracteres. CHAR(60) se usa para almacenar contraseñas encriptadas, ya que los hashes suelen tener una longitud fija. TEXT permite almacenar información extensa, como biografías. ENUM se usa para definir el tipo de usuario y restringe los valores permitidos.

Tipos de datos fecha y hora

Los datos de fecha y hora son esenciales en bases de datos que manejan eventos, registros de actividad o cualquier dato con un componente temporal.

El tipo DATE almacena solo fechas en el formato YYYY-MM-DD. TIME almacena únicamente horas en HH:MI:SS. DATETIME guarda tanto la fecha como la hora y es útil cuando se necesita una marca de tiempo completa. TIMESTAMP es similar a DATETIME, pero se basa en el tiempo UNIX, lo que permite realizar conversiones automáticas de zona horaria. YEAR almacena solo el año.

  • DATE: Solo fecha (YYYY-MM-DD).
  • DATETIME: Fecha y hora (YYYY-MM-DD HH:MI:SS).
  • TIMESTAMP: Similar a DATETIME, pero basado en UNIX timestamp.
  • TIME: Solo hora (HH:MI:SS).
  • YEAR: Solo el año (YYYY).

En este caso, DATE almacena la fecha en que se realiza el pedido, mientras que TIME registra la hora estimada de entrega. TIMESTAMP almacena la fecha y hora exactas del pedido, y CURRENT_TIMESTAMP asigna automáticamente la hora actual en el momento de la inserción.

Tipos de datos booleanos

Los valores booleanos (TRUE o FALSE) en SQL se representan generalmente con BOOLEAN o BOOL. Sin embargo, en la mayoría de los motores de bases de datos, esto se almacena internamente como TINYINT(1), donde 0 representa FALSE y 1 representa TRUE.

Aquí, BOOLEAN se usa para indicar si la suscripción de un usuario está activa o no. Si no se especifica un valor al insertar un registro, el campo tomará el valor por defecto TRUE.

Las relaciones en SQL son fundamentales para estructurar y organizar los datos de manera eficiente en bases de datos relacionales. Una relación en este contexto implica cómo las tablas interactúan entre sí, y SQL ofrece diversas maneras de establecer estas relaciones, como las claves primarias y claves foráneas.

En SQL, las relaciones entre tablas se basan principalmente en claves primarias y claves foráneas. Veamos cómo funcionan y cómo se implementan:

Relación de Uno a Uno (1:1)

En una relación uno a uno (1:1), cada registro de una tabla está asociado con un único registro de otra tabla. Esto significa que no puede haber más de un registro relacionado entre las dos tablas.

Cómo implementarlo en SQL:

Para establecer una relación 1:1, generalmente se crea una clave primaria en una de las tablas, y en la otra tabla, se establece una clave foránea que hace referencia a esa clave primaria. También es común usar restricciones de unicidad para asegurarse de que no se repitan los valores.

Ejemplo:

Explicación:

  • En este caso, DetallesEmpleado tiene una clave primaria id, que también es una clave foránea que hace referencia al campo id de la tabla Empleados.
  • La relación es uno a uno porque no puede haber más de un registro en DetallesEmpleado con el mismo id de Empleados. Cada empleado tendrá, como máximo, un conjunto de detalles.

Relación de Uno a Muchos (1:N)

La relación uno a muchos (1:N) es una de las más comunes. En esta relación, un único registro de una tabla está asociado con muchos registros de otra tabla. Es decir, una fila de la tabla principal puede estar relacionada con varias filas de la tabla secundaria, pero cada fila de la tabla secundaria solo puede estar relacionada con una fila de la tabla principal.

Cómo implementarlo en SQL:

Para implementar una relación 1:N, se coloca una clave foránea en la tabla «hija» (la que tiene los muchos), que hace referencia a la clave primaria de la tabla «padre» (la que tiene el uno).

Ejemplo:

Explicación:

  • La tabla Clientes tiene un campo id que es la clave primaria.
  • La tabla Pedidos tiene una columna id_cliente, que es una clave foránea que hace referencia a la columna id de la tabla Clientes.
  • La relación es uno a muchos porque un cliente puede tener muchos pedidos, pero cada pedido solo puede estar asociado a un único cliente.

Relación de Muchos a Muchos (N:M)

Una relación muchos a muchos (N:M) ocurre cuando muchos registros de una tabla están relacionados con muchos registros de otra tabla. Para implementar este tipo de relación, se requiere una tabla intermedia (también conocida como tabla de unión o «junction table»), que tendrá claves foráneas que hagan referencia a las claves primarias de ambas tablas involucradas.

Cómo implementarlo en SQL:

Se crea una tabla intermedia que contiene dos claves foráneas, una para cada tabla relacionada. Esta tabla intermedia no tiene una clave primaria propia, pero las combinaciones de las claves foráneas suelen ser únicas.

Ejemplo:

Explicación:

  • La tabla Estudiantes contiene una columna id que es la clave primaria de los estudiantes.
  • La tabla Cursos tiene una columna id como clave primaria para los cursos.
  • La tabla Estudiantes_Cursos es la tabla intermedia que establece la relación N:M. Contiene dos claves foráneas: id_estudiante que hace referencia a Estudiantes(id) y id_curso que hace referencia a Cursos(id).
  • En la tabla intermedia, la combinación de id_estudiante y id_curso es la clave primaria, lo que asegura que un estudiante no pueda estar inscrito más de una vez en el mismo curso.

Integridad Referencial y Restricciones ON DELETE / ON UPDATE

Al establecer relaciones entre tablas mediante claves foráneas, también puedes especificar cómo debe comportarse la base de datos cuando se eliminan o actualizan registros en una tabla referenciada.

Los modificadores ON DELETE y ON UPDATE permiten controlar este comportamiento:

  • ON DELETE CASCADE: Si un registro en la tabla principal se elimina, los registros correspondientes en la tabla secundaria también se eliminarán.
  • ON DELETE SET NULL: Si un registro en la tabla principal se elimina, el valor de la clave foránea en la tabla secundaria se establecerá como NULL.
  • ON UPDATE CASCADE: Si la clave primaria en la tabla principal se actualiza, las claves foráneas en las tablas secundarias también se actualizarán.
  • ON UPDATE RESTRICT: Impide que se actualicen claves primarias en la tabla principal si existen registros relacionados en la tabla secundaria.

Ejemplo con ON DELETE CASCADE:

Los modificadores en SQL son opciones que se aplican a las columnas de una tabla para definir restricciones, comportamientos predeterminados o características especiales en los datos. Estos modificadores ayudan a controlar cómo se almacenan, validan o gestionan los datos dentro de una base de datos.

A continuación, se explican algunos de los modificadores más comunes que puedes usar al crear una tabla en SQL:

NOT NULL

El modificador NOT NULL asegura que una columna no puede aceptar valores nulos. Es útil cuando necesitas que una columna siempre contenga un valor.

Ejemplo:

En este caso, tanto nombre como salario deben tener un valor, no se pueden insertar registros con estas columnas vacías.

DEFAULT

El modificador DEFAULT asigna un valor predeterminado a una columna si no se especifica un valor al insertar un nuevo registro.

Ejemplo:

En este caso, si no se proporciona una fecha de pedido al insertar un registro, se usará automáticamente la fecha actual (CURRENT_DATE). Además, si no se especifica un estado, se usará 'Pendiente' por defecto.

AUTO_INCREMENT

El modificador AUTO_INCREMENT (en MySQL) o SERIAL (en PostgreSQL) se utiliza para hacer que una columna de tipo entero se incremente automáticamente con cada nuevo registro insertado. Se usa comúnmente en claves primarias.

Ejemplo:

En este caso, cada vez que insertes un nuevo producto, el valor de id se incrementará automáticamente sin necesidad de especificarlo.

PRIMARY KEY

El modificador PRIMARY KEY se utiliza para definir una columna o un conjunto de columnas como clave primaria de la tabla. Una clave primaria debe ser única y no puede ser NULL. De esta forma, garantiza la unicidad de cada fila en la tabla.

Ejemplo:

En este caso, id_cliente se usa como clave primaria, lo que significa que cada valor en esa columna debe ser único y no puede ser NULL.

UNIQUE

El modificador UNIQUE garantiza que todos los valores de una columna (o conjunto de columnas) sean únicos en la tabla. A diferencia de PRIMARY KEY, una columna con UNIQUE puede contener valores NULL, pero no puede tener valores duplicados.

Ejemplo:

Aquí, la columna email no puede tener valores duplicados en la tabla, lo que asegura que cada usuario tenga una dirección de correo única.

FOREIGN KEY

El modificador FOREIGN KEY se utiliza para establecer una relación entre dos tablas. Define que los valores de una columna (o conjunto de columnas) deben coincidir con los valores de la clave primaria o única de otra tabla. Esto asegura la integridad referencial, es decir, que no se puedan insertar valores que no existan en la tabla relacionada.

Ejemplo:

Aquí, id_cliente en la tabla Pedidos es una clave externa que hace referencia a la clave primaria id_cliente de la tabla Clientes. Esto garantiza que no se puedan insertar pedidos con un id_cliente que no exista en la tabla Clientes.

CHECK

El modificador CHECK se usa para establecer una restricción de validación sobre los valores de una columna. Permite definir una condición que debe cumplirse para que un valor sea insertado o actualizado.

Ejemplo:

En este caso, la restricción CHECK asegura que la edad de un empleado sea de al menos 18 años y que el salario sea un valor positivo.

INDEX

El modificador INDEX se utiliza para crear índices en una o más columnas de una tabla, lo que mejora el rendimiento de las consultas. Los índices permiten realizar búsquedas más rápidas, pero ocupan más espacio y pueden ralentizar las inserciones y actualizaciones.

Aquí, se crea un índice en la columna categoria para optimizar las consultas que busquen productos por categoría. Aunque los índices mejoran el rendimiento en las consultas, también pueden aumentar el tiempo de inserción y actualización de los registros.

AUTO_INCREMENT y NOT NULL (combinados)

Es muy común ver el modificador AUTO_INCREMENT combinado con NOT NULL en la creación de claves primarias. Aunque AUTO_INCREMENT asigna automáticamente un valor único a la columna, el modificador NOT NULL asegura que esos valores no puedan ser NULL, lo cual es una propiedad de la clave primaria.

Ejemplo:

En este caso, la columna id es clave primaria, y además se incrementa automáticamente. También se garantiza que nunca sea NULL, lo cual es obligatorio para una clave primaria.

 

XAMPP es un paquete de software gratuito que permite crear un servidor local para el desarrollo y prueba de aplicaciones web. Su nombre proviene de los componentes que incluye:

  • X: Compatible con múltiples sistemas operativos (Windows, Linux y macOS).
  • A: Apache (servidor web).
  • M: MySQL/MariaDB (gestor de bases de datos).
  • P: PHP (lenguaje de programación para servidores web).
  • P: Perl (lenguaje de programación adicional).

Es una herramienta ampliamente utilizada por desarrolladores y estudiantes para trabajar con PHP, MySQL y phpMyAdmin sin necesidad de un servidor en línea.

Cómo iniciar XAMPP

  1. Abrir el Panel de Control de XAMPP desde el menú de inicio o desde la carpeta C:\xampp.

  2. Iniciar los servicios básicos:

    • Hacer clic en «Start» en los módulos Apache y MySQL.
    • Si todo funciona correctamente, los nombres cambiarán a color verde.
  3. Acceder a phpMyAdmin

    • Abrir un navegador web e ingresar la siguiente URL: http://localhost/phpmyadmin.

phpMyAdmin es una aplicación web que permite la administración de bases de datos MySQL y MariaDB a través de una interfaz gráfica fácil de usar. Es una de las herramientas más utilizadas para gestionar bases de datos de forma eficiente sin necesidad de escribir comandos SQL manualmente.

¿Para qué sirve phpMyAdmin?

Con phpMyAdmin, los usuarios pueden:

  • Crear, modificar y eliminar bases de datos.
  • Administrar tablas, registros y relaciones entre datos.
  • Ejecutar consultas SQL de forma manual o automatizada.
  • Importar y exportar datos en diferentes formatos (CSV, SQL, XML, JSON, etc.).
  • Gestionar permisos de usuarios y seguridad en bases de datos.

Ventajas de phpMyAdmin

  • Interfaz amigable: No es necesario escribir código SQL para realizar la mayoría de tareas.
  • Accesible desde cualquier navegador: Funciona como una aplicación web sin necesidad de instalación en el equipo del usuario.
  • Compatible con MySQL y MariaDB: Facilita la gestión de bases de datos relacionales ampliamente usadas.
  • Funciones avanzadas: Permite crear copias de seguridad, optimizar bases de datos y gestionar permisos de usuarios.

¿Cómo acceder a phpMyAdmin?

Para usar phpMyAdmin, normalmente se accede desde un servidor local o remoto a través de una URL como:

http://localhost/phpmyadmin (en servidores locales como XAMPP, WAMP o MAMP)
http://tudominio.com/phpmyadmin (en servidores en línea)

Al acceder, se requiere un usuario y contraseña para conectarse a la base de datos.

3. SQL Insertar registros

Instalar XAMPP en EducaAndOS.

Acceso a PhpMyAdmin

Crear una base de datos llamada instituto y en ella crear una tabla llamada alumnos. Los campos de la tabla serán:

  • idAlumno. Entero, autoincrementable y clave principal.
  • DNI. Texto.
  • Nombre y apellidos. Texto.
  • Edad. Numérico.
  • Curso. Texto