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

  1. ¿Por qué necesitamos una base de datos?

  2. Accediendo a phpMyAdmin

  3. Creando la base de datos

  4. Creando la tabla 'files'

  5. Explicación de cada columna

  6. Configurando el tipo ENUM

  7. Verificando la estructura

  8. Importando el archivo SQL

  9. Código completo SQL

  10. Próximos pasos


💾 1. ¿Por qué necesitamos una base de datos?

Beneficios de usar una base de datos

BeneficioExplicación
PersistenciaLos datos se guardan permanentemente
OrganizaciónPodemos buscar y filtrar archivos fácilmente
RelacionesPodemos conectar archivos con usuarios, transcripciones, etc.
EscalabilidadPodemos manejar miles de archivos
IntegridadLos datos están estructurados y validados

¿Qué vamos a almacenar?

CampoDescripción
IDIdentificador único del archivo
contentLa transcripción del audio/video
fileUrlRuta donde está almacenado el archivo
translatedTraducción del contenido (opcional)
langIdioma de la traducción
typeTipo 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

  1. 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)

  2. Abrir phpMyAdmin

    • Abre tu navegador web

    • Ve a: http://localhost/phpmyadmin/

    https://i.imgur.com/placeholder.png

  3. 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":

  1. Nombre: MyWhisper

  2. Cotejamiento: 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?

ParteSignificado
utf8mb4Codificación UTF-8 (soporta emojis y caracteres especiales)
unicodeOrdenamiento basado en estándar Unicode
ciCase 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

  1. En el campo "Nombre", escribe: files

  2. En el campo "Número de columnas", escribe: 6 (seis columnas)

  3. Haz clic en el botón "Ejecutar" (o "Go")

Paso 3: Definir las columnas

Ahora vamos a definir cada columna:

ColumnaTipoLongitudAtributosDescripción
1IDINT11AUTO_INCREMENT, PRIMARY KEYIdentificador único
2contentTEXT-NULL permitidoTranscripción del archivo
3fileUrlVARCHAR255NOT NULLRuta del archivo
4translatedTEXT-NULL permitidoTraducción del contenido
5langVARCHAR255NULL permitidoIdioma de la traducción
6typeENUM-NOT NULL'audio' o 'video'

📝 5. Explicación de cada columna

1. ID - Identificador único

sql
ID int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
PropiedadExplicación
int(11)Número entero, hasta 11 dígitos
NOT NULLNo puede estar vacío
AUTO_INCREMENTSe incrementa automáticamente con cada nuevo registro
PRIMARY KEYClave primaria (identificador único)

Ejemplo de valores:

text
1
2
3
4
...

2. content - Transcripción del archivo

sql
content text DEFAULT NULL
PropiedadExplicación
textPuede almacenar hasta 65,535 caracteres
DEFAULT NULLPor defecto está vacío (sin transcripción)

Ejemplo:

text
"Hello and welcome back. In this lecture we are going to create our MySQL database..."

3. fileUrl - Ruta del archivo

sql
fileUrl varchar(255) NOT NULL
PropiedadExplicación
varchar(255)Cadena de texto de hasta 255 caracteres
NOT NULLObligatorio (siempre debe tener un valor)

Ejemplo:

text
"files/7f3a4b2c1d8e9f.mp4"

4. translated - Traducción

sql
translated text DEFAULT NULL
PropiedadExplicación
textPuede almacenar texto largo
DEFAULT NULLPor defecto está vacío (sin traducción)

Ejemplo:

text
"Hola y bienvenido de vuelta. En esta lección vamos a crear..."

5. lang - Idioma

sql
lang varchar(255) DEFAULT NULL
PropiedadExplicación
varchar(255)Cadena de texto de hasta 255 caracteres
DEFAULT NULLPor defecto está vacío (sin idioma seleccionado)

Ejemplo:

text
"Spanish"
"English"
"French"

6. type - Tipo de archivo

sql
type enum('audio','video') NOT NULL
PropiedadExplicación
enum('audio','video')Solo puede ser 'audio' o 'video'
NOT NULLObligatorio (siempre debe tener un valor)

Ejemplo:

text
'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

  1. Seleccionar ENUM en el tipo de columna

    • En la columna "Tipo", selecciona ENUM

  2. Escribir los valores permitidos

    • En el campo "Longitud/Valores", escribe: 'audio','video'

    • Es importante usar comillas simples

  3. Valor por defecto

    • Deja el valor por defecto vacío o selecciona uno de los valores

Visualización en phpMyAdmin

text
Tipo: ENUM
Longitud/Valores: 'audio','video'

Ejemplos de uso

sql
-- 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

text
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

  1. Selecciona la tabla files en el panel izquierdo

  2. Haz clic en la pestaña "Estructura" (o "Structure")

  3. Verifica que las columnas sean correctas

Verificación de índices

  1. Haz clic en la pestaña "Relación" o "Índices"

  2. Verifica que ID sea 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 MyWhisper en el panel izquierdo

Paso 3: Importar el archivo SQL

  1. Haz clic en la pestaña "Importar" (o "Import")

  2. Haz clic en "Seleccionar archivo"

  3. Busca y selecciona el archivo MyWhisper.sql

  4. Haz 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.sql

  • Pégalo en el área de texto

Paso 3: Ejecutar

  • Haz clic en "Ejecutar" (o "Go")


💻 9. Código completo SQL

Archivo: MyWhisper.sql

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)

sql
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

sql
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;
ParteExplicación
CREATE TABLEComando para crear una tabla
`files`Nombre de la tabla (entre backticks)
int(11)Número entero con hasta 11 dígitos
NOT NULLEl campo no puede estar vacío
AUTO_INCREMENTSe incrementa automáticamente
PRIMARY KEYClave primaria (identificador único)
ENGINE=InnoDBMotor de almacenamiento (soporta transacciones)
CHARSET=utf8mb4Codificación UTF-8 con soporte emoji

Tipo de datos usados

TipoDescripciónUso
int(11)Número enteroIDs, contadores
varchar(255)Texto corto (hasta 255 caracteres)URLs, nombres, idiomas
textTexto largo (hasta 65,535 caracteres)Contenido, traducciones
enum('a','b')Valor entre opciones predefinidasTipo de archivo

🗂️ 11. Estructura completa del proyecto

text
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

text
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

  1. Ve a http://localhost/phpmyadmin/

  2. Busca MyWhisper en el panel izquierdo

  3. Haz clic en la base de datos

  4. Verifica que la tabla files esté presente

Paso 3: Insertar datos de prueba

Ve a la pestaña "Insertar" y agrega un registro:

text
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

sql
INSERT INTO files (fileUrl, type) VALUES ('files/mi_video.mp4', 'video');

Insertar un archivo con transcripción

sql
INSERT INTO files (fileUrl, content, type) 
VALUES ('files/mi_video.mp4', 'Texto de la transcripción...', 'video');

Obtener todos los archivos (ordenados por ID)

sql
SELECT * FROM files ORDER BY ID DESC;

Obtener solo videos

sql
SELECT * FROM files WHERE type = 'video';

Obtener archivos con transcripción

sql
SELECT * FROM files WHERE content IS NOT NULL;

Actualizar una transcripción

sql
UPDATE files SET content = 'Nueva transcripción...' WHERE ID = 1;

Eliminar un archivo

sql
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:

  1. Crear la clase Database para conectarnos a MySQL

  2. Guardar información del archivo en la base de datos

  3. Recuperar archivos de la base de datos

  4. Mostrar la lista de archivos recientes

Avance del código de la próxima lección

php
// 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:

sql
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:

sql
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:

sql
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

Entradas más populares de este blog

Cómo usar Whisper para sacar el texto de un video

Tutorial 18: Creando la Página de Visualización de Archivos Recientes

Tutorial 11: ¿Qué es Whisper AI y Cómo Funciona?