Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
¿Es correcto este diseño de la base de datos PostgreSQL de la plataforma de redes sociales?

Aquí hay un diseño de la persistencia de una plataforma de redes sociales simple. Actualmente, existen estas tablas:

  • Usuarios: Tabla principal de la base de datos que contiene la información de los usuarios registrados en nuestra aplicación. Los datos que se almacenarán en esta tabla serán el nombre
    • Nombre: usuarios
    • Campos: id, nombre, nombre de usuario, contraseña, correo electrónico, biografía, seguidores, siguiente, imagen.
    • Clave principal: identificación
  • Publicaciones: tabla de base de datos con todas las publicaciones de todos los usuarios. Cada publicación contendrá el título, la descripción y el contenido principal de la publicación.
    • Nombre: publicaciones
    • Campos: id, título, imagen, descripción, contenido, created_at, likes, user_id.
    • Clave principal: identificación
    • Clave foránea: user_id a los usuarios de la tabla
  • Publicaciones que les gustan a los usuarios: una tabla que define la relación de muchos a muchos entre varias publicaciones que les gustaron y los usuarios a los que les gustaron.
    • Nombre: posts_liked_users
    • Campos: post_id, user_id
    • Clave externa: post_id a las publicaciones de la tabla
    • Clave foránea: user_id a los usuarios de la tabla
  • sigue Tabla para poder crear una relación de "seguimiento" entre usuarios.
    • Nombre: sigue
    • Campos: siguiente_usuario_id, seguido_usuario_id
    • Clave externa: siguiente_usuario_id a los usuarios de la tabla
    • Clave externa: seguido_usuario_id a los usuarios de la tabla

Aquí están los comandos para crear las tablas.

 CREATE TABLE users( id SERIAL PRIMARY KEY, name VARCHAR (50) NOT NULL, username VARCHAR (50) UNIQUE NOT NULL, password VARCHAR (255) NOT NULL, email VARCHAR (255) NOT NULL, bio VARCHAR (255) NOT NULL, followers INTEGER NOT NULL, following INTEGER NOT NULL, picture VARCHAR (255) NOT NULL ) CREATE TABLE posts( id SERIAL PRIMARY KEY, title VARCHAR (255) NOT NULL, picture VARCHAR (255) NOT NULL, description VARCHAR (255) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW(), likes INTEGER NOT NULL, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE ) CREATE TABLE posts_liked_users( post_id INTEGER NOT NULL REFERENCES posts(id) ON DELETE CASCADE, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE ) CREATE TABLE follows( following_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, followed_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE )

Y aquí está el diagrama:

ingrese la descripción de la imagen aquí

¿Son correctos el diagrama y el diseño general o falta algo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Como respuesta a cualquier persona que tenga un problema similar al de la pregunta, refactoricé el diseño en función de algunas sugerencias e investigaciones:

  • Actualicé los campos VARCHAR para que sean TEXT , que es la guía general.

  • Debido a la normalización , eliminé los followers y following de los users y me likes de la post para reducir la redundancia de datos y mejorar la integridad de los datos .

  • Agregué un campo created_at en los follows y posts_liked_users para mantener el tiempo cuando un usuario siguió a otro o le gustó una publicación.

 CREATE TABLE users( id SERIAL PRIMARY KEY, name TEXT NOT NULL, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, email TEXT NOT NULL, bio TEXT NOT NULL, picture TEXT NOT NULL ) CREATE TABLE posts( id SERIAL PRIMARY KEY, title TEXT NOT NULL, picture TEXT NOT NULL, description TEXT NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW(), user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE ) CREATE TABLE posts_liked_users( created_at TIMESTAMP NOT NULL DEFAULT NOW(), post_id INTEGER NOT NULL REFERENCES posts(id) ON DELETE CASCADE, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE ) CREATE TABLE follows( created_at TIMESTAMP NOT NULL DEFAULT NOW(), following_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, followed_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE )

referencias:

  • comentarios de https://www.reddit.com/r/PostgreSQL/comments/h87gf8/is_this_social_media_platform_postgresql_database/

  • PostgreSQL: diferencia entre texto y varchar (caracter variable)

  • ¿Alguna desventaja de usar el tipo de datos "texto" para almacenar cadenas?

  • https://en.wikipedia.org/wiki/Database_normalization

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda