Modelado de Datos para una Red Social Básica en SQL

Clase 2 de 29Curso de Node.js: Autenticación, Microservicios y Redis

Resumen

¿Cómo estructuramos los datos para una red social?

Para crear una red social de manera eficiente, es crucial entender cómo estructurar los datos que vamos a almacenar. La organización y relación de estos datos serán el eje central para asegurar un funcionamiento óptimo de nuestra aplicación. El objetivo es desarrollar una red social sencilla, construida desde lo más básico para tener flexibilidad en futuras expansiones.

¿Qué entidades y propiedades necesitamos?

En cualquier red social, identificar las entidades y sus propiedades es el primer paso. Aquí, las principales entidades son los usuarios y las publicaciones (posts).

  • Usuarios: Almacenan propiedades esenciales como nombre y ID, permitiendo gestionar la información personal y las interacciones del usuario.
  • Publicaciones (Posts): Cada publicación también tendrá un ID y estará relacionada con un usuario específico que actúa como autor de dicha publicación.

¿Cómo se relacionan las entidades?

El pilar de una red social son las interrelaciones entre las diferentes entidades:

  1. Un usuario publica un post: Esta relación es esencial para vincular las publicaciones con sus creadores. Cada publicación debe tener un campo que identifique al usuario que la creó.

  2. Seguir a otros usuarios: Un usuario puede seguir a múltiples usuarios, y a su vez, puede ser seguido por otros. Esta relación es de "muchos a muchos".

  3. Likes en publicaciones: Los usuarios pueden expresar su agrado por cualquier número de publicaciones, y viceversa, cualquier publicación puede recibir likes de diferentes usuarios. Nuevamente, se trata de una relación "muchos a muchos".

¿Cómo convertir estas relaciones en tablas?

Dado que la estructura de datos es bastante relacional, es conveniente usar un sistema de bases de datos relacional, como MySQL. Construir tablas coherentes y organizadas es fundamental para garantizar la eficiencia en las consultas.

-- Tabla para los usuarios
CREATE TABLE Users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

-- Tabla para las publicaciones
CREATE TABLE Posts (
    id INT PRIMARY KEY,
    user_id INT,
    content TEXT,
    FOREIGN KEY (user_id) REFERENCES Users(id)
);

-- Tabla para la relación de seguir usuarios
CREATE TABLE UserFollows (
    follower_id INT,
    followee_id INT,
    FOREIGN KEY (follower_id) REFERENCES Users(id),
    FOREIGN KEY (followee_id) REFERENCES Users(id)
);

-- Tabla para los likes en las publicaciones
CREATE TABLE PostLikes (
    post_id INT,
    user_id INT,
    FOREIGN KEY (post_id) REFERENCES Posts(id),
    FOREIGN KEY (user_id) REFERENCES Users(id)
);

¿Cómo gestionar la autenticación de usuarios?

La autenticación es un elemento crítico para la seguridad. Separar la autenticación de la entidad del usuario evita comprometer datos sensibles como contraseñas.

-- Tabla para la autenticación de usuarios
CREATE TABLE Auth (
    user_id INT PRIMARY KEY,
    email VARCHAR(100),
    password_hash VARCHAR(255),
    FOREIGN KEY (user_id) REFERENCES Users(id)
);

Mantener credenciales de acceso en una tabla separada garantiza que incluso si acceden indebidamente a la tabla de usuarios, la información crítica permanece segura.

Este enfoque estructurado no solo mejora la organización de nuestros datos, sino que también asegura la escalabilidad y seguridad del sistema. Prepárate para escribir código y llevar nuestra aplicación al siguiente nivel. ¡Ánimo, el aprendizaje y el descubrimiento apenas comienza!