This project involves the design and implementation of a relational database named blog_db, created to manage a blog platform. It includes the architecture for users, posts, and a "likes" interaction system.
🔗 https://dbdiagram.io/d/68f58d0b2e68d21b413a138a
The design is based on a relational model that ensures referential integrity through the strategic use of Primary Keys (PK) and Foreign Keys (FK).
This project was designed to:
- Structure a Content Management System (Blog) through entity modeling and relationship mapping.
- Configure a database schema that guarantees data consistency via Primary and Foreign Keys.
- Execute Create, Read, and Update (CRUD) operations to simulate real-world web application activity.
- Resolve business requirements using advanced queries to consolidate data from multiple tables.
- Relational Architecture Design.
- Implementation of Referential Integrity.
- Data Life Cycle Management (CRUD).
- Information Analysis and Consolidation.
- Data Modeling (ERD): Ability to translate logical requirements into technical diagrams using tools like
dbDiagram. - SQL Mastery (PostgreSQL): Writing DDL (Data Definition Language) scripts for schema creation and DML (Data Manipulation Language) for data manipulation.
- Relationship Logic: Implementing 1:N (one user has many posts) and N:M (many users like many posts) relationships via junction tables.
- Multi-table Queries (JOINs): Mastery of the
INNER JOINclause to extract related information, a fundamental skill for data analysis. - Constraint Control: Application of appropriate data types (SERIAL, TEXT, VARCHAR) and reference management to prevent orphaned data.
- User Management: Registration and storage of author profiles with unique identifiers and email addresses.
- Content Publishing: A system allowing users to create detailed articles, automatically linking them to their author identity.
- Interaction System (Likes): "Like" functionality that records the exact interaction between a user and a specific post.
- Authorship Reporting: Generation of views that combine post content with full original author data.
- Engagement Reporting: Queries capable of listing users who have interacted with specific content, allowing for post popularity tracking.
Users: Stores author and reader information.
| 🔑 id | first_name | last_name | email |
|-------|------------|-----------|----------------------|
| 1 | Pancha | Cuevas | panchita@example.com |Posts: Contains publications linked to a unique author (1:N Relationship).
| 🔑 id | 🗝️ user_id | title | text |
|--------|------------|------------------|----------------------|
| 1 | 1 | Learning psql | Postgres is a relational database engine, widely used with nodejs. |
Likes: Junction table managing the relationship between users and posts (N:M Relationship).
| 🔑 id | user_id | post_id |
|--------|---------|---------|
| 1 | 1 | 18 |
| Technology | Purpose |
|---|---|
| PostgreSQL 18 | Database Engine |
| pgAdmin 4 | Database Management Tool |
| dbdiagram.io | Database Modeling |
| SQL (DDL y DML) | Database Language |
📁 S01E01-BLOG_DATABASE
├── S01E01-blog_db.sql The blog_database.sql file contains the full script to replicate the environment. Below are the specific data analysis queries requested:
To track which user wrote each article, an INNER JOIN was implemented:
select * from posts
join users
on posts.user_id = users.id;To identify which users interacted with specific posts, a triple JOIN was performed connecting the junction table:
select * from users
join likes
on users.id = likes.user_id
join posts
on likes.post_id = posts.id;- Clone this repository:
git clone https://github.com/Clic-stack/BLOG_DATABASE.git- Create a database in your PostgreSQL client:
CREATE DATABASE blog_db;- Execute or import the
blog_database.sqlfile to generate the tables and sample data.
Developed by Clio Salgado with the goal of creating a robust "blog_db" system for professional blog management.
🔽 Versión en Español 🔽
Este proyecto consiste en el diseño e implementación de una base de datos relacional denominada blog_db, diseñada para gestionar un sistema de blogs. Incluye la arquitectura de usuarios, publicaciones y un sistema de interacciones mediante "likes".
🔗 https://dbdiagram.io/d/68f58d0b2e68d21b413a138a
El diseño se basa en un modelo relacional que garantiza la integridad referencial mediante el uso de llaves primarias (PK) y llaves foráneas (FK).
Este proyecto fue diseñado para:
- Estructurar un sistema de gestión de contenidos (Blog) mediante el modelado de entidades y sus relaciones.
- Configurar un esquema de base de datos que garantice la consistencia de los datos mediante el uso correcto de llaves primarias (Primary Keys) y foráneas (Foreign Keys).
- Ejecutar operaciones de creación, lectura y actualización de registros para simular la actividad real de una plataforma web.
- Resolver requerimientos de negocio mediante consultas avanzadas que unifiquen datos de múltiples tablas.
- Diseño de Arquitectura Relacional.
- Implementación de Integridad Referencial.
- Gestión del Ciclo de Vida de los Datos (CRUD).
- Análisis y Consolidación de Información.
- Modelado de Datos (ERD): Capacidad para traducir requerimientos lógicos en diagramas técnicos utilizando herramientas de diseño como
dbDiagram. - Dominio de SQL (PostgreSQL): Escritura de scripts DDL (Data Definition Language) para la creación de esquemas y DML (Data Manipulation Language) para la manipulación de datos.
- Lógica de Relaciones: Implementación de relaciones 1:N (un usuario tiene muchos posts) y N:M (muchos usuarios dan likes a muchos posts) a través de tablas pivote.
- Consultas Multitabla (JOINs): Dominio de la cláusula
INNER JOINpara extraer información relacionada, una habilidad fundamental para el análisis de datos. - Control de Restricciones: Aplicación de tipos de datos adecuados (como SERIAL, TEXT, VARCHAR) y manejo de referencias para prevenir datos huérfanos.
- Gestión de Usuarios: Registro y almacenamiento de perfiles de autor con identificadores únicos y correos electrónicos.
- Publicación de Contenidos: Sistema que permite a los usuarios crear artículos detallados, vinculándolos automáticamente con su identidad de autor.
- Sistema de Interacciones (Likes): Funcionalidad de "Me gusta" que registra la interacción exacta entre un usuario y una publicación específica.
- Reportes de Autoría: Generación de vistas que combinan el contenido de los posts con los datos completos del autor original.
- Reportes de Engagement: Consultas capaces de listar quiénes son los usuarios que han interactuado con contenidos específicos, permitiendo rastrear la popularidad de las publicaciones.
Users: Almacena la información de los autores y lectores.
| 🔑 id | first_name | last_name | email |
|--------|------------|-----------|----------------------|
| 1 | Pancha | Cuevas | panchita@example.com |
Posts: Contiene las publicaciones vinculadas a un autor único (Relación 1:N).
| 🔑 id | 🗝️ user_id | title | text |
|--------|------------|------------------|----------------------|
| 1 | 1 | Aprendiendo psql | Postgres es un motor de base de datos relacional, bastante utilizado al hacer aplicaciones con nodejs. |
Likes: Tabla pivote que gestiona la relación entre usuarios y publicaciones (Relación N:M).
| 🔑 id | user_id | post_id |
|--------|---------|---------|
| 1 | 1 | 18 |
| Tecnología | Propóito |
|---|---|
| PostgreSQL 18 | Motor de Basess de Datos |
| pgAdmin 4 | Gestor de Bases de Datos |
| dbdiagram.io | Modelado de Bases de Datos |
| SQL (DDL y DML) | Lenguaje de Bases de Datos |
📁 S01E01-BLOG_DATABASE
├── S01E01-blog_db.sql El archivo blog_database.sql contiene el script completo para replicar el entorno. A continuación, se detallan las consultas de análisis de datos solicitadas:
Para obtener la trazabilidad de qué usuario escribió cada artículo, se implementó un INNER JOIN:
select * from posts
join users
on posts.user_id = users.id;Para identificar qué usuarios interactuaron con qué publicaciones, se realizó un triple JOIN conectando la tabla pivote:
select * from users
join likes
on users.id = likes.user_id
join posts
on likes.post_id = posts.id;- Clona este repositorio:
git clone https://github.com/Clic-stack/BLOG_DATABASE.git- Crea una base de datos en tu cliente de PostgreSQL:
CREATE DATABASE blog_db;- Ejecuta o importa el archivo
blog_database.sqlpara generar las tablas y los datos de prueba.
Desarrollado por Clio Salgado con el objetivo de crear una base de datos “blog_db” para gestionar un Blog.