9. Creating database for the application
Creando la Base de Datos MySQL para tu Aplicación
📚 Tema del Tutorial:
"Diseño de Base de Datos MySQL: Estructurando y Creando Tablas para tu Aplicación Web"
🎯 Objetivo de Aprendizaje
Al final de este tutorial entenderás:
Qué es una base de datos y por qué es necesaria
Cómo diseñar tablas para almacenar información
Qué son los tipos de datos (VARCHAR, TEXT, ENUM)
Cómo usar phpMyAdmin para crear bases de datos
La importancia de las claves primarias y auto-incremento
📂 Parte 1: ¿Por qué Necesitamos una Base de Datos?
La Analogía del Archivo vs Biblioteca:
text
📁 SIN BASE DE DATOS (Archivo físico)
├── 📄 Archivo1.txt (audio_123.mp3 → "Hola mundo")
├── 📄 Archivo2.txt (video_456.mp4 → "Buenos días")
├── 📄 Archivo3.txt (audio_789.wav → "¿Cómo estás?")
└️️ ❌ Problemas:
- Difícil de buscar
- Lento para muchos archivos
- Sin organización
- Sin relaciones entre datos
📚 CON BASE DE DATOS (Biblioteca organizada)
├── 🏷️ Estanterías (Tablas)
├── 📚 Libros organizados (Registros)
├── 📋 Índice por autor/título (Consultas rápidas)
├── 🔗 Relaciones entre libros (Relaciones)
└️️ ✅ Ventajas:
- Búsqueda instantánea
- Miles de registros sin problemas
- Datos relacionados
- Seguridad y backups
¿Qué vamos a almacenar en nuestra aplicación?
Para MyWhisper necesitamos guardar:
📁 Archivos subidos (audio/video)
📝 Texto extraído (transcripción)
🌍 Traducciones (texto en diferentes idiomas)
🏷️ Metadatos (tipo, fecha, idioma)
🗺️ Parte 2: Planificando Nuestra Tabla - El "Blueprint"
Pensando como un Arquitecto:
Antes de crear, debemos diseñar qué información necesitamos:
text
📋 LISTA DE INFORMACIÓN NECESARIA:
1. ID Único → Para identificar cada archivo
2. URL del archivo → Dónde está guardado el audio/video
3. Contenido de texto → Lo que dice el audio/video
4. Traducción → El texto en otro idioma
5. Idioma → A qué idioma se tradujo
6. Tipo → ¿Es audio o video?
Traducción a Columnas de Base de Datos:
🛠️ Parte 3: Accediendo a phpMyAdmin - Nuestra "Herramienta de Construcción"
¿Qué es phpMyAdmin?
phpMyAdmin es como el panel de control de tu base de datos MySQL:
text
🖥️ PHPMYADMIN = TABLERO DE CONTROL
├── 🗄️ Ver todas las bases de datos
├── ➕ Crear nuevas tablas
├── ✏️ Editar estructuras existentes
├── 🔍 Buscar datos específicos
├── 📤 Importar/exportar datos
└️️ ⚙️ Configurar permisos y usuarios
Cómo Acceder:
text
🌐 En tu navegador:
http://localhost/phpmyadmin
🔑 Credenciales por defecto (XAMPP):
Usuario: root
Contraseña: (vacía)
Importante de seguridad: En producción NUNCA dejes la contraseña vacía.
🏗️ Parte 4: Creando la Base de Datos Paso a Paso
Paso 1: Crear la Base de Datos
En phpMyAdmin:
Haz clic en "Bases de datos" en el menú izquierdo
Escribe el nombre: MyWhisper
Haz clic en "Crear"
Código SQL equivalente:
sql
CREATE DATABASE MyWhisper;
Visualización:
text
📦 BASES DE DATOS EXISTENTES
├── information_schema (sistema)
├── mysql (sistema)
├── performance_schema (sistema)
└── MyWhisper ← ¡NUEVA! ✅
Paso 2: Seleccionar la Base de Datos
sql
USE MyWhisper;
-- "A partir de ahora, trabaja con MyWhisper"
📊 Parte 5: Creando la Tabla files - Columna por Columna
Diseño Visual de la Tabla:
text
📁 TABLA: files (archivos)
├── 🆔 ID (INT) → Identificador único
├── 🌐 fileUrl (VARCHAR) → Ruta del archivo
├── 📝 content (TEXT) → Texto transcrito
├── 🌍 translated (TEXT) → Texto traducido
├── 🗣️ lang (VARCHAR) → Idioma de traducción
└️️ 🎵 type (ENUM) → Tipo: audio/video
Explicación Detallada de Cada Columna:
1. Columna ID - El "Número de DNI"
Configuración:
text
Nombre: ID
Tipo: INT
Longitud: 11
Atributos: UNSIGNED
Nulo: NO
Auto Incremento: ✅ SÍ
Índice: PRIMARY
¿Qué significa cada cosa?
INT = Número entero (1, 2, 3...)
UNSIGNED = Solo números positivos (0, 1, 2...)
Auto Incremento = MySQL asigna automáticamente: 1, 2, 3, 4...
PRIMARY KEY = Identificador único principal
Analogía: Como el número de DNI de cada persona - único y autoasignado.
2. Columna fileUrl - La "Dirección" del Archivo
Configuración:
text
Nombre: fileUrl
Tipo: VARCHAR
Longitud: 255
¿Qué es VARCHAR?
VAR = Variable (ocupa solo el espacio necesario)
CHAR = Caracteres (texto)
255 = Máximo de caracteres permitidos
Ejemplo de datos:
text
✅ 'files/a1b2c3d4.mp3' (19 caracteres)
✅ 'files/video_xyz789.mp4' (22 caracteres)
❌ [Texto de más de 255 caracteres] (no cabe)
3. Columna content - El "Contenido" Transcrito
Configuración:
text
Nombre: content
Tipo: TEXT
Nulo: ✅ SÍ
TEXT vs VARCHAR:
text
📄 VARCHAR(255) → Para textos cortos (URLs, nombres)
- Máximo: 255 caracteres
- Más rápido para buscar
📝 TEXT → Para textos largos (transcripciones, artículos)
- Hasta ~65,000 caracteres
- Perfecto para transcripciones de audio
4. Columna translated - La "Traducción"
Configuración:
text
Nombre: translated
Tipo: TEXT
Nulo: ✅ SÍ
Default: NULL
¿Por qué permite NULL?
Porque inicialmente un archivo no tiene traducción. Primero se transcribe, luego (opcionalmente) se traduce.
5. Columna lang - El "Idioma" de Traducción
Configuración:
text
Nombre: lang
Tipo: VARCHAR
Longitud: 255
Nulo: ✅ SÍ
Ejemplos de valores:
text
✅ 'English'
✅ 'Spanish'
✅ 'French'
✅ 'German'
✅ NULL (si no hay traducción)
6. Columna type - El "Tipo" de Archivo
Configuración:
text
Nombre: type
Tipo: ENUM
Valores: 'audio', 'video'
¿Qué es ENUM?
ENUM = Enumeración (lista de valores permitidos)
Solo puede ser 'audio' o 'video'
Previene errores (no permite 'imagen', 'documento', etc.)
Ventajas de ENUM:
✅ Validación automática
✅ Más eficiente que VARCHAR
✅ Claridad en los datos permitidos
🖥️ Parte 6: Proceso Visual en phpMyAdmin
Capturas Mentales del Proceso:
Paso 1: Crear nueva tabla
text
📍 phpMyAdmin → MyWhisper → Crear tabla
├── Nombre de la tabla: files
├── Número de columnas: 6
└️️ Clic en "Continuar"
Paso 2: Rellenar formulario de columnas
text
📋 FORMULARIO DE COLUMNAS (6 filas)
Fila 1: ID | INT | 11 | PRIMARY | AUTO_INCREMENT
Fila 2: fileUrl | VARCHAR | 255
Fila 3: content | TEXT | (vacío)
Fila 4: translated | TEXT | (vacío)
Fila 5: lang | VARCHAR | 255
Fila 6: type | ENUM | 'audio','video'
Paso 3: Configurar ENUM correctamente
text
Para type → ENUM:
En el campo "Longitud/Valores":
'escribir': 'audio','video'
IMPORTANTE: Con comillas simples y separado por comas
Paso 4: Guardar y verificar
text
Clic en "Guardar"
✅ Tabla 'files' creada en base de datos 'MyWhisper'
📝 Parte 7: Código SQL Completo Generado
El SQL que phpMyAdmin Ejecuta:
sql
-- 1. Crear la base de datos (si no existe)
CREATE DATABASE IF NOT EXISTS MyWhisper;
-- 2. Usar la base de datos
USE MyWhisper;
-- 3. Crear la tabla files
CREATE TABLE IF NOT EXISTS files (
ID INT(11) NOT NULL AUTO_INCREMENT,
fileUrl VARCHAR(255) NOT NULL,
content TEXT DEFAULT NULL,
translated TEXT DEFAULT NULL,
lang VARCHAR(255) DEFAULT NULL,
type ENUM('audio', 'video') NOT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Explicación del SQL línea por línea:
sql
CREATE TABLE IF NOT EXISTS files ( -- Si ya existe, no la crea
ID INT(11) NOT NULL AUTO_INCREMENT, -- Entero, no nulo, auto-aumenta
fileUrl VARCHAR(255) NOT NULL, -- Texto hasta 255 chars, obligatorio
content TEXT DEFAULT NULL, -- Texto largo, por defecto NULL
translated TEXT DEFAULT NULL, -- Texto largo, por defecto NULL
lang VARCHAR(255) DEFAULT NULL, -- Texto hasta 255 chars, por defecto NULL
type ENUM('audio', 'video') NOT NULL, -- Solo 'audio' o 'video', obligatorio
PRIMARY KEY (ID) -- ID es la clave principal
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Motor y codificación
🔍 Parte 8: Verificando que la Tabla se Creó Correctamente
Cómo Verificar en phpMyAdmin:
En el menú izquierdo: Haz clic en MyWhisper
Debajo deberías ver: files (6 columnas)
Haz clic en files y luego en "Examinar"
Deberías ver algo como:
text
📊 TABLA: files (0 filas)
┌─────┬──────────┬─────────┬────────────┬──────┬───────┐
│ ID │ fileUrl │ content │ translated │ lang │ type │
├─────┼──────────┼─────────┼────────────┼──────┼───────┤
│ │ │ │ │ │ │
└─────┴──────────┴─────────┴────────────┴──────┴───────┘
(0 filas) ← Vacía por ahora, se llenará con datos
Consultas SQL para Verificar:
1. Ver estructura de la tabla:
sql
DESCRIBE files;
Resultado esperado:
text
+------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| fileUrl | varchar(255) | NO | | NULL | |
| content | text | YES | | NULL | |
| translated | text | YES | | NULL | |
| lang | varchar(255) | YES | | NULL | |
| type | enum('audio','video') | NO | | NULL | |
+------------+-----------------------+------+-----+---------+----------------+
2. Ver todas las tablas en MyWhisper:
sql
SHOW TABLES;
Resultado: files
🧩 Parte 9: Ejercicio Práctico - Crea tu Propia Tabla
Ejercicio 1: Tabla "usuarios" para un Blog
Diseña una tabla para usuarios con:
ID único
Nombre de usuario
Email
Contraseña (hash)
Fecha de registro
Nivel (admin/usuario)
Solución sugerida en phpMyAdmin:
text
📋 FORMULARIO USUARIOS
├── id | INT | 11 | PRIMARY | AUTO_INCREMENT
├── username | VARCHAR | 50 | UNIQUE
├── email | VARCHAR | 100 | UNIQUE
├── password | VARCHAR | 255
├── created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP
└── role | ENUM | 'admin','user' | DEFAULT 'user'
Ejercicio 2: Tabla "posts" para el Blog
sql
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
📊 Parte 10: Tipos de Datos en MySQL - Guía Rápida
Los Más Comunes para Principiantes:
Reglas para Elegir Tipos:
Números → Usa INT para IDs, DECIMAL para dinero
Texto corto (nombres, emails) → VARCHAR(255)
Texto largo (contenido) → TEXT
Opciones fijas (estados, tipos) → ENUM
Fechas → TIMESTAMP para registro automático
🔗 Parte 11: Conexión con Nuestro Código PHP
Archivo DB.php - El "Puente" entre PHP y MySQL:
php
<?php
class DB{
function connect(){
try{
// 🏗️ Construir el puente entre PHP y MySQL
$db = new PDO(
'mysql:host=localhost; dbname=MyWhisper', // 📍 Dirección
'root', // 👤 Usuario
'' // 🔑 Contraseña (vacía en desarrollo)
);
return $db; // 🌉 ¡Puente listo para usar!
}catch(PDOException $error){
echo 'Connection Failed: ' . $error; // 🚨 Si falla la construcción
}
}
}
?>
Cómo Funciona la Conexión:
text
🖥️ PHP (Nuestra aplicación)
↓ PDO (PHP Data Objects)
🌉 PUENTE DE CONEXIÓN
↓ MySQL (Base de datos)
🗄️ TABLA 'files'
PDO es como un traductor:
Habla "PHP" por un lado
Habla "MySQL" por el otro
Traduce automáticamente entre ambos
❓ Parte 12: Cuestionario de Evaluación
Pregunta 1:
¿Qué representa la columna ID en nuestra tabla files?
a) El tamaño del archivo en bytes
b) Un identificador único auto-incremental ✅
c) La fecha de creación del archivo
d) El tipo de archivo (audio/video)
Explicación: El ID es la clave primaria que identifica de forma única cada registro.
Pregunta 2:
¿Cuál es la diferencia principal entre VARCHAR y TEXT?
a) VARCHAR es para números, TEXT para texto
b) VARCHAR tiene límite de 255 caracteres, TEXT puede almacenar más ✅
c) TEXT es más rápido para búsquedas
d) No hay diferencia, son lo mismo
Pregunta 3:
¿Por qué usamos el tipo ENUM para la columna type?
a) Para almacenar archivos binarios
b) Para permitir solo los valores 'audio' o 'video' ✅
c) Para almacenar fechas
d) Para guardar contrasehas encriptadas
Pregunta 4:
¿Qué significa "AUTO_INCREMENT" en una columna?
a) Que el valor disminuye automáticamente
b) Que MySQL asigna automáticamente valores únicos crecientes ✅
c) Que el valor se actualiza cada hora
d) Que el valor se copia de otra columna
Pregunta 5:
En la configuración de ENUM en phpMyAdmin, ¿cómo se escriben los valores?
a) audio;video
b) "audio","video"
c) 'audio','video' ✅
d) audio-video
Pregunta 6:
¿Por qué la columna translated permite valores NULL?
a) Por error en el diseño
b) Porque inicialmente un archivo no tiene traducción ✅
c) Porque es obligatoria
d) Porque almacena números
Explicación: Un archivo primero se transcribe (content), luego opcionalmente se traduce (translated).
Pregunta 7:
¿Qué motor de base de datos usa nuestra tabla por defecto?
a) MyISAM
b) InnoDB ✅
c) Memory
d) CSV
Respuesta: InnoDB es el motor por defecto en MySQL moderno, soporta transacciones.
🏆 Resumen Final - Checklist de Creación de Base de Datos
Pasos Completados:
✅ Base de datos creada: MyWhisper
✅ Tabla creada: files
✅ Columnas definidas (6):
✅ ID (INT, PRIMARY, AUTO_INCREMENT)
✅ fileUrl (VARCHAR 255, NOT NULL)
✅ content (TEXT, NULL permitido)
✅ translated (TEXT, NULL permitido)
✅ lang (VARCHAR 255, NULL permitido)
✅ type (ENUM 'audio','video', NOT NULL)
✅ Clave primaria establecida: ID
✅ Tabla verificada en phpMyAdmin
✅ Archivo DB.php listo para conexión
Las 5 Reglas de Oro del Diseño de Tablas:
🏷️ Cada tabla necesita una clave primaria única
📏 Elige tipos de datos apropiados para cada columna
🔒 Define qué columnas pueden ser NULL y cuáles no
🎯 Usa ENUM para valores de lista fija
📝 Documenta tu diseño (qué guarda cada columna)
🚀 Próximos Pasos - Lo que Viene
Lo que Haremos en Próximas Lecciones:
🔗 Conectar PHP a la base de datos
💾 Guardar archivos subidos en la tabla
📖 Leer datos para mostrar en la interfaz
🔄 Actualizar registros (añadir traducciones)
🗑️ Gestionar eliminación de archivos
Ejemplo de INSERT que haremos pronto:
sql
INSERT INTO files (fileUrl, content, type)
VALUES ('files/abc123.mp3', 'Texto transcrito del audio', 'audio');
Ejemplo de SELECT para mostrar archivos:
sql
SELECT * FROM files ORDER BY ID DESC LIMIT 10;
-- Muestra los 10 archivos más recientes
📚 Recursos para Aprender Más
SQL Básico para Continuar:
sql
-- Insertar datos
INSERT INTO tabla (col1, col2) VALUES ('valor1', 'valor2');
-- Leer datos
SELECT * FROM tabla WHERE condición;
-- Actualizar datos
UPDATE tabla SET columna = 'nuevo valor' WHERE condición;
-- Eliminar datos
DELETE FROM tabla WHERE condición;
Proyectos para Practicar Diseño de Bases de Datos:
📚 Sistema de biblioteca: Libros, autores, préstamos
🛒 Tienda online: Productos, categorías, pedidos
🎬 Plataforma de películas: Películas, actores, reseñas
📅 Calendario de eventos: Eventos, ubicaciones, asistentes
¡Excelente trabajo! 🎉 Has creado la base de datos que almacenará toda la información de tu aplicación. Este es un paso fundamental - sin una buena base de datos, tu aplicación no podría escalar ni funcionar correctamente.
💡 Consejo final para principiantes:
Cuando diseñes bases de datos, piensa siempre en:
¿Qué datos necesito almacenar? (haz una lista)
¿Cómo se relacionan entre sí? (dibuja diagramas)
¿Qué consultas haré frecuentemente? (optimiza para eso)
¿Podría crecer en el futuro? (diseña pensando en escala)
🗄️ ¡Ahora tienes un almacén organizado para tus datos! En la próxima lección aprenderemos a guardar y recuperar información de él
Comentarios
Publicar un comentario