Tutorial 9: Creando la Base de Datos MySQL para MyWhisper
Tutorial 9: Creando la Base de Datos MySQL para MyWhisper
¡Hola y bienvenido de nuevo!
En esta lección vamos a crear nuestra base de datos MySQL para almacenar la información de los archivos subidos. Esto nos permitirá gestionar y mostrar los archivos en la sección "Archivos Generados Recientemente". ¡Vamos a ello!
📋 Contenido del Tutorial
¿Por qué necesitamos una base de datos?
Accediendo a phpMyAdmin
Creando la base de datos
Creando la tabla 'files'
Explicación de cada columna
Configurando el tipo ENUM
Verificando la estructura
Importando el archivo SQL
Código completo SQL
Próximos pasos
💾 1. ¿Por qué necesitamos una base de datos?
Beneficios de usar una base de datos
| Beneficio | Explicación |
|---|---|
| Persistencia | Los datos se guardan permanentemente |
| Organización | Podemos buscar y filtrar archivos fácilmente |
| Relaciones | Podemos conectar archivos con usuarios, transcripciones, etc. |
| Escalabilidad | Podemos manejar miles de archivos |
| Integridad | Los datos están estructurados y validados |
¿Qué vamos a almacenar?
| Campo | Descripción |
|---|---|
ID | Identificador único del archivo |
content | La transcripción del audio/video |
fileUrl | Ruta donde está almacenado el archivo |
translated | Traducción del contenido (opcional) |
lang | Idioma de la traducción |
type | Tipo de archivo (audio o video) |
🗄️ 2. Accediendo a phpMyAdmin
¿Qué es phpMyAdmin?
phpMyAdmin es una herramienta web que nos permite administrar bases de datos MySQL de forma gráfica, sin necesidad de escribir comandos SQL.
Acceso desde XAMPP
Abrir el Panel de Control de XAMPP
Inicia XAMPP desde el escritorio o menú de inicio
Asegúrate de que Apache y MySQL estén corriendo (verde)
Abrir phpMyAdmin
Abre tu navegador web
Ve a:
http://localhost/phpmyadmin/
Alternativa desde XAMPP
En el Panel de Control, haz clic en el botón "Admin" junto a MySQL
🏗️ 3. Creando la base de datos
Paso 1: Ir a la sección de bases de datos
En phpMyAdmin, haz clic en la pestaña "Bases de datos" (o "Databases" en inglés).
https://i.imgur.com/placeholder.png
Paso 2: Nombrar la base de datos
En el campo "Crear base de datos":
Nombre:
MyWhisperCotejamiento:
utf8mb4_unicode_ci(para soportar todos los caracteres)
Paso 3: Crear la base de datos
Haz clic en el botón "Crear" (o "Create").
¿Qué es utf8mb4_unicode_ci?
| Parte | Significado |
|---|---|
utf8mb4 | Codificación UTF-8 (soporta emojis y caracteres especiales) |
unicode | Ordenamiento basado en estándar Unicode |
ci | Case Insensitive (no distingue entre mayúsculas y minúsculas) |
📊 4. Creando la tabla 'files'
Paso 1: Navegar a la base de datos
Una vez creada la base de datos, haz clic en ella en el panel izquierdo.
Paso 2: Crear la tabla
En el campo "Nombre", escribe:
filesEn el campo "Número de columnas", escribe:
6(seis columnas)Haz clic en el botón "Ejecutar" (o "Go")
Paso 3: Definir las columnas
Ahora vamos a definir cada columna:
| Columna | Tipo | Longitud | Atributos | Descripción | |
|---|---|---|---|---|---|
| 1 | ID | INT | 11 | AUTO_INCREMENT, PRIMARY KEY | Identificador único |
| 2 | content | TEXT | - | NULL permitido | Transcripción del archivo |
| 3 | fileUrl | VARCHAR | 255 | NOT NULL | Ruta del archivo |
| 4 | translated | TEXT | - | NULL permitido | Traducción del contenido |
| 5 | lang | VARCHAR | 255 | NULL permitido | Idioma de la traducción |
| 6 | type | ENUM | - | NOT NULL | 'audio' o 'video' |
📝 5. Explicación de cada columna
1. ID - Identificador único
ID int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
| Propiedad | Explicación |
|---|---|
int(11) | Número entero, hasta 11 dígitos |
NOT NULL | No puede estar vacío |
AUTO_INCREMENT | Se incrementa automáticamente con cada nuevo registro |
PRIMARY KEY | Clave primaria (identificador único) |
Ejemplo de valores:
1 2 3 4 ...
2. content - Transcripción del archivo
content text DEFAULT NULL
| Propiedad | Explicación |
|---|---|
text | Puede almacenar hasta 65,535 caracteres |
DEFAULT NULL | Por defecto está vacío (sin transcripción) |
Ejemplo:
"Hello and welcome back. In this lecture we are going to create our MySQL database..."
3. fileUrl - Ruta del archivo
fileUrl varchar(255) NOT NULL
| Propiedad | Explicación |
|---|---|
varchar(255) | Cadena de texto de hasta 255 caracteres |
NOT NULL | Obligatorio (siempre debe tener un valor) |
Ejemplo:
"files/7f3a4b2c1d8e9f.mp4"
4. translated - Traducción
translated text DEFAULT NULL
| Propiedad | Explicación |
|---|---|
text | Puede almacenar texto largo |
DEFAULT NULL | Por defecto está vacío (sin traducción) |
Ejemplo:
"Hola y bienvenido de vuelta. En esta lección vamos a crear..."
5. lang - Idioma
lang varchar(255) DEFAULT NULL
| Propiedad | Explicación |
|---|---|
varchar(255) | Cadena de texto de hasta 255 caracteres |
DEFAULT NULL | Por defecto está vacío (sin idioma seleccionado) |
Ejemplo:
"Spanish" "English" "French"
6. type - Tipo de archivo
type enum('audio','video') NOT NULL
| Propiedad | Explicación |
|---|---|
enum('audio','video') | Solo puede ser 'audio' o 'video' |
NOT NULL | Obligatorio (siempre debe tener un valor) |
Ejemplo:
'video' 'audio'
🔢 6. Configurando el tipo ENUM
¿Qué es ENUM?
ENUM es un tipo de dato que solo permite valores predefinidos. Es perfecto para cuando sabemos exactamente qué valores puede tomar un campo.
Configuración paso a paso
Seleccionar ENUM en el tipo de columna
En la columna "Tipo", selecciona
ENUM
Escribir los valores permitidos
En el campo "Longitud/Valores", escribe:
'audio','video'Es importante usar comillas simples
Valor por defecto
Deja el valor por defecto vacío o selecciona uno de los valores
Visualización en phpMyAdmin
Tipo: ENUM Longitud/Valores: 'audio','video'
Ejemplos de uso
-- Insertar un video INSERT INTO files (fileUrl, type) VALUES ('video.mp4', 'video'); -- Insertar un audio INSERT INTO files (fileUrl, type) VALUES ('audio.mp3', 'audio'); -- Esto dará error (valor no permitido) INSERT INTO files (fileUrl, type) VALUES ('documento.pdf', 'pdf');
✅ 7. Verificando la estructura
Estructura final de la tabla
Tabla: files
+------------+----------------------+------+-----+---------+----------------+
| Campo | Tipo | Nulo | Clave | Default | Extra |
+------------+----------------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| content | text | YES | | NULL | |
| fileUrl | varchar(255) | NO | | NULL | |
| translated | text | YES | | NULL | |
| lang | varchar(255) | YES | | NULL | |
| type | enum('audio','video')| NO | | NULL | |
+------------+----------------------+------+-----+---------+----------------+Verificación en phpMyAdmin
Selecciona la tabla
filesen el panel izquierdoHaz clic en la pestaña "Estructura" (o "Structure")
Verifica que las columnas sean correctas
Verificación de índices
Haz clic en la pestaña "Relación" o "Índices"
Verifica que
IDsea PRIMARY KEY
📥 8. Importando el archivo SQL
Método 1: Usando el archivo SQL proporcionado
Paso 1: Abrir phpMyAdmin
Ve a
http://localhost/phpmyadmin/
Paso 2: Seleccionar la base de datos
Haz clic en
MyWhisperen el panel izquierdo
Paso 3: Importar el archivo SQL
Haz clic en la pestaña "Importar" (o "Import")
Haz clic en "Seleccionar archivo"
Busca y selecciona el archivo
MyWhisper.sqlHaz clic en "Ejecutar" (o "Go")
Método 2: Ejecutar el SQL manualmente
Paso 1: Abrir la pestaña SQL
En la base de datos
MyWhisper, haz clic en "SQL"
Paso 2: Pegar el código SQL
Copia el contenido de
MyWhisper.sqlPégalo en el área de texto
Paso 3: Ejecutar
Haz clic en "Ejecutar" (o "Go")
💻 9. Código completo SQL
Archivo: MyWhisper.sql
-- ============================================= -- Base de datos: MyWhisper -- Descripción: Almacena archivos de audio/video -- y sus transcripciones -- ============================================= -- Crear la base de datos (si no existe) CREATE DATABASE IF NOT EXISTS `MyWhisper` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Usar la base de datos USE `MyWhisper`; -- ============================================= -- Tabla: files -- Almacena la información de los archivos subidos -- ============================================= CREATE TABLE `files` ( -- Identificador único del archivo `ID` int(11) NOT NULL AUTO_INCREMENT, -- Transcripción del contenido del archivo `content` text DEFAULT NULL, -- Ruta donde está almacenado el archivo `fileUrl` varchar(255) NOT NULL, -- Traducción del contenido (opcional) `translated` text DEFAULT NULL, -- Idioma de la traducción `lang` varchar(255) DEFAULT NULL, -- Tipo de archivo: audio o video `type` enum('audio','video') NOT NULL, -- Clave primaria PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================= -- Verificar que la tabla se creó correctamente -- ============================================= -- Mostrar la estructura de la tabla DESCRIBE `files`; -- ============================================= -- Ejemplos de inserción (opcional) -- ============================================= -- Insertar un video de ejemplo INSERT INTO `files` ( `fileUrl`, `type` ) VALUES ( 'files/ejemplo_video.mp4', 'video' ); -- Insertar un audio de ejemplo INSERT INTO `files` ( `fileUrl`, `type` ) VALUES ( 'files/ejemplo_audio.mp3', 'audio' ); -- ============================================= -- Consultas útiles -- ============================================= -- Obtener todos los archivos SELECT * FROM `files` ORDER BY `ID` DESC; -- Obtener solo videos SELECT * FROM `files` WHERE `type` = 'video'; -- Obtener solo audios SELECT * FROM `files` WHERE `type` = 'audio'; -- Obtener archivos con transcripción SELECT * FROM `files` WHERE `content` IS NOT NULL;
Versión resumida (solo la tabla)
CREATE TABLE `files` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `content` text DEFAULT NULL, `fileUrl` varchar(255) NOT NULL, `translated` text DEFAULT NULL, `lang` varchar(255) DEFAULT NULL, `type` enum('audio','video') NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
📖 10. Explicación detallada del SQL
Desglose del CREATE TABLE
CREATE TABLE `files` ( -- Definición de columnas `ID` int(11) NOT NULL AUTO_INCREMENT, -- ... más columnas ... PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
| Parte | Explicación |
|---|---|
CREATE TABLE | Comando para crear una tabla |
`files` | Nombre de la tabla (entre backticks) |
int(11) | Número entero con hasta 11 dígitos |
NOT NULL | El campo no puede estar vacío |
AUTO_INCREMENT | Se incrementa automáticamente |
PRIMARY KEY | Clave primaria (identificador único) |
ENGINE=InnoDB | Motor de almacenamiento (soporta transacciones) |
CHARSET=utf8mb4 | Codificación UTF-8 con soporte emoji |
Tipo de datos usados
| Tipo | Descripción | Uso |
|---|---|---|
int(11) | Número entero | IDs, contadores |
varchar(255) | Texto corto (hasta 255 caracteres) | URLs, nombres, idiomas |
text | Texto largo (hasta 65,535 caracteres) | Contenido, traducciones |
enum('a','b') | Valor entre opciones predefinidas | Tipo de archivo |
🗂️ 11. Estructura completa del proyecto
whisper/ ├── backend/ │ ├── init.php │ └── classes/ │ └── Whisper.php ├── files/ # Archivos subidos │ ├── 7f3a4b2c1d.mp4 │ └── 8e9f0a1b2c.mp3 ├── frontend/ │ ├── css/ │ ├── images/ │ └── js/ ├── index.php └── view.php
Relación entre archivos y base de datos
Base de datos (MyWhisper.files)
├── ID: 1
├── fileUrl: "files/7f3a4b2c1d.mp4" ← Enlaza al archivo físico
├── content: "Texto transcrito..."
├── type: "video"
└── ...
Sistema de archivos
└── files/
└── 7f3a4b2c1d.mp4 ← Archivo físico🧪 12. Probando la base de datos
Paso 1: Verificar la conexión
Asegúrate de que MySQL esté corriendo:
En XAMPP: MySQL debe estar en verde
Alternativa:
http://localhost/phpmyadmin/
Paso 2: Verificar la base de datos
Ve a
http://localhost/phpmyadmin/Busca
MyWhisperen el panel izquierdoHaz clic en la base de datos
Verifica que la tabla
filesesté presente
Paso 3: Insertar datos de prueba
Ve a la pestaña "Insertar" y agrega un registro:
ID: (dejar vacío - auto_increment) content: (dejar vacío) fileUrl: "files/prueba.mp4" translated: (dejar vacío) lang: (dejar vacío) type: "video"
Paso 4: Verificar los datos
Ve a la pestaña "Examinar" (o "Browse") para ver los datos insertados.
📊 13. Consultas SQL útiles
Insertar un archivo
INSERT INTO files (fileUrl, type) VALUES ('files/mi_video.mp4', 'video');
Insertar un archivo con transcripción
INSERT INTO files (fileUrl, content, type) VALUES ('files/mi_video.mp4', 'Texto de la transcripción...', 'video');
Obtener todos los archivos (ordenados por ID)
SELECT * FROM files ORDER BY ID DESC;
Obtener solo videos
SELECT * FROM files WHERE type = 'video';
Obtener archivos con transcripción
SELECT * FROM files WHERE content IS NOT NULL;
Actualizar una transcripción
UPDATE files SET content = 'Nueva transcripción...' WHERE ID = 1;
Eliminar un archivo
DELETE FROM files WHERE ID = 1;
🎯 14. Próximos pasos
Lo que hemos logrado
✅ Base de datos MySQL creada
✅ Tabla 'files' estructurada
✅ Columnas definidas correctamente
✅ Tipo ENUM configurado
✅ Importación del archivo SQL
✅ Verificación de la estructura
Lo que viene en la próxima lección
En la siguiente lección vamos a:
Crear la clase Database para conectarnos a MySQL
Guardar información del archivo en la base de datos
Recuperar archivos de la base de datos
Mostrar la lista de archivos recientes
Avance del código de la próxima lección
// backend/classes/Database.php class Database { private $host = 'localhost'; private $dbname = 'MyWhisper'; private $user = 'root'; private $pass = ''; private $pdo; public function __construct() { // Conectar a la base de datos $this->pdo = new PDO(...); } public function saveFile($fileUrl, $type) { // Guardar en la base de datos $sql = "INSERT INTO files (fileUrl, type) VALUES (?, ?)"; // ... } }
❓ Preguntas frecuentes
¿Qué es phpMyAdmin y por qué lo usamos?
Es una herramienta gráfica para administrar MySQL
Nos permite crear tablas sin escribir SQL
¿Qué significa AUTO_INCREMENT?
El valor se incrementa automáticamente con cada nuevo registro
No necesitamos especificar el ID, MySQL lo hace por nosotros
¿Qué es PRIMARY KEY?
Un identificador único para cada registro
No puede haber dos registros con el mismo ID
¿Por qué usar ENUM en lugar de VARCHAR?
ENUM solo permite valores predefinidos
Es más eficiente y evita errores
¿Qué es COLLATE utf8mb4_unicode_ci?
Define cómo se ordenan y comparan los textos
Soporta caracteres especiales y emojis
¿Puedo cambiar la estructura después de crear la tabla?
Sí, usando ALTER TABLE
Pero es mejor planificar bien desde el principio
¿Cómo respaldo mi base de datos?
En phpMyAdmin, usa la pestaña "Exportar"
Guarda el archivo SQL para respaldo
🎓 Ejercicio práctico
Ejercicio 1: Agregar una nueva columna
Agrega una columna created_at para registrar cuándo se subió el archivo:
ALTER TABLE `files` ADD COLUMN `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
Ejercicio 2: Agregar más tipos ENUM
Agrega 'document' y 'image' a los tipos permitidos:
ALTER TABLE `files` MODIFY `type` enum('audio','video','document','image') NOT NULL;
Ejercicio 3: Crear una tabla de usuarios
Crea una tabla para usuarios que suben archivos:
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
¡Excelente trabajo! Ahora tenemos una base de datos completamente estructurada para almacenar nuestros archivos y transcripciones. En la próxima lección, conectaremos nuestra aplicación PHP con esta base de datos.
Comentarios
Publicar un comentario