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:

  1. 📁 Archivos subidos (audio/video)

  2. 📝 Texto extraído (transcripción)

  3. 🌍 Traducciones (texto en diferentes idiomas)

  4. 🏷️ 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:

Información que tenemos

Tipo de columna en MySQL

Ejemplo de dato

ID único automático

INT + AUTO_INCREMENT

1, 2, 3, 4...

URL del archivo

VARCHAR(255)

'files/abc123.mp3'

Texto extraído

TEXT

'Hola, bienvenidos al tutorial...'

Texto traducido

TEXT

'Hello, welcome to the tutorial...'

Idioma de traducción

VARCHAR(255)

'English', 'Spanish'

Tipo de archivo

ENUM('audio','video')

'audio'


🛠️ 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:

  1. Haz clic en "Bases de datos" en el menú izquierdo

  2. Escribe el nombre: MyWhisper

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

  1. ✅ Validación automática

  2. ✅ Más eficiente que VARCHAR

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

  1. En el menú izquierdo: Haz clic en MyWhisper

  2. Debajo deberías ver: files (6 columnas)

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

  1. ID único

  2. Nombre de usuario

  3. Email

  4. Contraseña (hash)

  5. Fecha de registro

  6. 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:

Tipo

Para qué sirve

Ejemplo

Tamaño

INT

Números enteros

1, 42, 1000

-2M a +2M

VARCHAR(n)

Texto corto variable

'Hola'

Hasta n caracteres

TEXT

Texto largo

Artículos, transcripciones

~65KB

ENUM

Valores de lista fija

'activo','inactivo'

Lista definida

TIMESTAMP

Fechas y horas

'2023-12-25 14:30:00'

Fecha+hora

BOOLEAN

Verdadero/Falso

TRUE, FALSE

1 byte

Reglas para Elegir Tipos:

  1. Números → Usa INT para IDs, DECIMAL para dinero

  2. Texto corto (nombres, emails) → VARCHAR(255)

  3. Texto largo (contenido) → TEXT

  4. Opciones fijas (estados, tipos) → ENUM

  5. 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:

  1. 🏷️ Cada tabla necesita una clave primaria única

  2. 📏 Elige tipos de datos apropiados para cada columna

  3. 🔒 Define qué columnas pueden ser NULL y cuáles no

  4. 🎯 Usa ENUM para valores de lista fija

  5. 📝 Documenta tu diseño (qué guarda cada columna)


🚀 Próximos Pasos - Lo que Viene

Lo que Haremos en Próximas Lecciones:

  1. 🔗 Conectar PHP a la base de datos

  2. 💾 Guardar archivos subidos en la tabla

  3. 📖 Leer datos para mostrar en la interfaz

  4. 🔄 Actualizar registros (añadir traducciones)

  5. 🗑️ 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:

  1. 📚 Sistema de biblioteca: Libros, autores, préstamos

  2. 🛒 Tienda online: Productos, categorías, pedidos

  3. 🎬 Plataforma de películas: Películas, actores, reseñas

  4. 📅 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:

  1. ¿Qué datos necesito almacenar? (haz una lista)

  2. ¿Cómo se relacionan entre sí? (dibuja diagramas)

  3. ¿Qué consultas haré frecuentemente? (optimiza para eso)

  4. ¿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

Entradas más populares de este blog

1-7. Transforma tu audio a texto

10. Haz que tu asistente hable

8. NUEVO - Solución si tu micrófono no está captando tu audio