16: Crear tu primera Base de Datos (Parte 2) - Relaciones y Claves Foráneas

 


Objetivo: Completar la estructura de nuestra base de datos blog_db creando las tablas de publicaciones y comentarios. Aprenderemos el concepto fundamental de Clave Foránea (Foreign Key) para relacionar tablas entre sí, dando a nuestra base de datos una estructura relacional coherente.

Hola, ¡bienvenido de nuevo!

En la lección anterior, creamos la base de datos blog_db y la tabla usuarios. Antes de insertar datos, debemos completar el resto de la estructura. Un blog no es solo usuarios, necesita publicaciones y comentarios. Lo más importante es que estos comentarios deben estar vinculados a un usuario específico y a una publicación específica. Aquí es donde entran en juego las relaciones.

1. Crear la Tabla de publicaciones

Siguiendo el mismo procedimiento que usamos para usuarios, vamos a crear nuestra segunda tabla.

  1. En el panel de Schemas, haz clic derecho sobre Tables (dentro de blog_db) y selecciona "Create Table...".

  2. Nombre de la Tabla: publicaciones.

  3. Configura las siguientes columnas:

Column NameDatatypePKNNAIDescripción
post_idINTIdentificador único para cada publicación.
tituloVARCHAR(200)Título del post.
contenidoTEXTEl cuerpo del artículo (usamos tipo TEXT porque puede ser muy largo).
fecha_publicacionDATEFecha en que se publicó.
  1. Haz clic en "Apply" y luego en "Finish".

2. Crear la Tabla de comentarios

Esta tabla es especial porque su función es conectar a las otras dos.

  1. Nuevamente, haz clic derecho en Tables -> "Create Table...".

  2. Nombre de la Tabla: comentarios.

  3. Configura las siguientes columnas. Presta mucha atención a los tipos de datos, especialmente en las columnas que harán de "puente":

Column NameDatatypePKNNAIDescripción
comentario_idINTIdentificador único para cada comentario.
post_idINTHace referencia a: ¿A qué publicación pertenece este comentario?
user_idINTHace referencia a: ¿Qué usuario escribió este comentario?
contenidoTEXTEl texto del comentario.
fecha_comentarioDATEFecha en que se realizó el comentario.
  1. Haz clic en "Apply". Por ahora, solo estamos creando la estructura básica. En el siguiente paso añadiremos las relaciones.

3. El Concepto Clave: Claves Foráneas (Foreign Keys)

Ahora tenemos tres tablas, pero están aisladas. Necesitamos decirle a MySQL cómo se relacionan.

  • ¿Qué es una Clave Foránea?

    • Es una columna (o conjunto de columnas) en una tabla que hace referencia a la Clave Primaria de otra tabla.

    • Piensa en ello como un "puente" lógico. El user_id en la tabla comentarios no es solo un número; es un dedo que apunta al user_id en la tabla usuarios. Nos dice: "El autor de este comentario es la persona con ID 3 en la tabla de usuarios".

  • ¿Para qué sirve?

    • Integridad Referencial: MySQL evitará que insertes un comentario con un user_id que no exista en la tabla usuarios. Esto mantiene tus datos limpios y coherentes.

    • Estructurar la información: Permite hacer consultas complejas como "Tráeme todos los comentarios de Juan Pérez en la publicación 'Mi Primer Post'".

4. Estableciendo las Relaciones (Foreign Keys) en comentarios

Vamos a modificar la tabla comentarios para añadir estas relaciones.

  1. En el panel de Schemas, localiza la tabla comentarios.

  2. Haz clic derecho sobre ella y selecciona "Alter Table..." (Modificar Tabla).

  3. En la ventana que se abre, busca la pestaña "Foreign Keys" (en la parte inferior).

4.1. Crear la relación con usuarios

  1. En la sección Foreign Keys, verás una cuadrícula. En la columna "Foreign Key Name", asigna un nombre descriptivo, por ejemplo: fk_comentario_usuario.

  2. En la columna "Referenced Table" (Tabla de referencia), selecciona blog_db.usuarios. Esto le dice a MySQL: "Esta clave va a apuntar a la tabla usuarios".

  3. En el panel de la derecha (Columnas), verás dos columnas:

    • Column: Aquí seleccionamos la columna de la tabla comentarios que actúa como clave foránea. Elige user_id.

    • Referenced Column: Aquí seleccionamos a qué columna de la otra tabla (usuarios) hace referencia. Elige user_id (que es su clave primaria).

¡Importante! Si al intentar esto ves un error, es casi seguro que los tipos de datos no coinciden. Por ejemplo, que en comentarios el user_id sea VARCHAR y en usuarios sea INTVerifica que ambas columnas (user_id en ambas tablas y post_id en ambas tablas) sean del mismo tipo: INT y tengan la propiedad NOT NULL. Si no es así, ve a la pestaña "Columns" y corrígelo antes de continuar.

4.2. Crear la relación con publicaciones

  1. En la misma pestaña "Foreign Keys", haz clic en la siguiente línea vacía en la cuadrícula de la izquierda para añadir otra clave foránea.

  2. Foreign Key Name: fk_comentario_publicacion.

  3. Referenced Table: blog_db.publicaciones.

  4. En el panel de columnas de la derecha:

    • Column: post_id (de la tabla comentarios).

    • Referenced Column: post_id (de la tabla publicaciones).

Tu configuración debería tener ahora dos claves foráneas definidas.

5. Aplicar los Cambios

  1. Haz clic en "Apply".

  2. Workbench te mostrará el código SQL que va a ejecutar. Verás algo similar a esto:

    sql
    ALTER TABLE `blog_db`.`comentarios`
    ADD INDEX `fk_comentario_usuario_idx` (`user_id` ASC) VISIBLE;
    -- (comandos para crear índices, lo cual optimiza las búsquedas)
    
    ALTER TABLE `blog_db`.`comentarios`
    ADD CONSTRAINT `fk_comentario_usuario`
      FOREIGN KEY (`user_id`)
      REFERENCES `blog_db`.`usuarios` (`user_id`)
      -- ... (opciones de restricción),
    ADD CONSTRAINT `fk_comentario_publicacion`
      FOREIGN KEY (`post_id`)
      REFERENCES `blog_db`.`publicaciones` (`post_id`);
    • ADD CONSTRAINT... FOREIGN KEY... REFERENCES... es la instrucción que crea oficialmente la relación.

  3. Haz clic en "Apply" y luego en "Finish".

6. Visualizando el Resultado

Ahora, si observas el panel de Schemas y despliegas la tabla comentarios (haz clic en la flecha junto a su nombre), verás que aparece una carpeta llamada "Foreign Keys". Dentro de ella, estarán las dos relaciones que acabas de crear (fk_comentario_usuario y fk_comentario_publicacion).

¡Felicidades! Has creado una estructura de base de datos relacional completamente funcional para un blog.

  • La tabla usuarios es independiente.

  • La tabla publicaciones es independiente.

  • La tabla comentarios actúa como un puente, vinculando cada comentario a un usuario y a una publicación específica gracias a las claves foráneas.

Resumen y Próximos Pasos

Al estructurar nuestra base de datos de esta manera, podemos almacenar y organizar eficientemente la información. Ahora, la base de datos "entiende" que un comentario no puede existir sin un usuario o sin una publicación, lo que garantiza la calidad de nuestros datos.

Te animo a experimentar creando tus propias tablas y relaciones en MySQL Workbench. Prueba con diferentes estructuras, como una base de datos para una tienda (clientes, productos, pedidos). Recuerda, la práctica es esencial para convertirte en un experto en bases de datos.

En nuestra próxima lección, vamos a darle vida a estas tablas. Aprenderemos a insertar, actualizar y eliminar datos (operaciones CRUD). ¡Nos vemos allí!

Comentarios

Entradas más populares de este blog

1-3-¿Qué es SQL?

6-8-Proyecto del Día 1

5-7. MySQL y MySQL Workbench