En este tema, exploraremos cómo diseñar una base de datos para una aplicación de comercio electrónico utilizando PostgreSQL. Este tipo de aplicación requiere una estructura de datos robusta y eficiente para manejar productos, usuarios, pedidos, inventarios y más. A lo largo de esta sección, cubriremos los siguientes puntos:

  1. Requisitos del Sistema
  2. Modelo Entidad-Relación (ER)
  3. Creación de Tablas
  4. Relaciones y Claves Foráneas
  5. Consultas Comunes
  6. Ejercicios Prácticos

  1. Requisitos del Sistema

Antes de comenzar con el diseño, es crucial entender los requisitos del sistema. Para una aplicación de comercio electrónico, los requisitos típicos incluyen:

  • Gestión de Usuarios: Registro, autenticación y perfiles de usuario.
  • Gestión de Productos: Información detallada de productos, categorías y precios.
  • Carrito de Compras: Añadir, actualizar y eliminar productos del carrito.
  • Pedidos: Procesamiento de pedidos, historial de pedidos y estados de pedidos.
  • Inventario: Gestión de stock y niveles de inventario.
  • Pagos: Procesamiento de pagos y métodos de pago.

  1. Modelo Entidad-Relación (ER)

El siguiente paso es diseñar un modelo ER que represente las entidades y sus relaciones. Aquí hay un ejemplo simplificado:

  • Usuarios: id, nombre, email, contraseña, dirección
  • Productos: id, nombre, descripción, precio, categoría_id
  • Categorías: id, nombre
  • Carrito: id, usuario_id, fecha_creación
  • Carrito_Productos: carrito_id, producto_id, cantidad
  • Pedidos: id, usuario_id, fecha_pedido, estado
  • Pedido_Productos: pedido_id, producto_id, cantidad, precio
  • Inventario: producto_id, cantidad

  1. Creación de Tablas

A continuación, crearemos las tablas en PostgreSQL basándonos en el modelo ER.

-- Tabla de Usuarios
CREATE TABLE Usuarios (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    contraseña VARCHAR(100) NOT NULL,
    direccion TEXT
);

-- Tabla de Categorías
CREATE TABLE Categorias (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL
);

-- Tabla de Productos
CREATE TABLE Productos (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT,
    precio DECIMAL(10, 2) NOT NULL,
    categoria_id INT REFERENCES Categorias(id)
);

-- Tabla de Carrito
CREATE TABLE Carrito (
    id SERIAL PRIMARY KEY,
    usuario_id INT REFERENCES Usuarios(id),
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de Carrito_Productos
CREATE TABLE Carrito_Productos (
    carrito_id INT REFERENCES Carrito(id),
    producto_id INT REFERENCES Productos(id),
    cantidad INT NOT NULL,
    PRIMARY KEY (carrito_id, producto_id)
);

-- Tabla de Pedidos
CREATE TABLE Pedidos (
    id SERIAL PRIMARY KEY,
    usuario_id INT REFERENCES Usuarios(id),
    fecha_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    estado VARCHAR(50) NOT NULL
);

-- Tabla de Pedido_Productos
CREATE TABLE Pedido_Productos (
    pedido_id INT REFERENCES Pedidos(id),
    producto_id INT REFERENCES Productos(id),
    cantidad INT NOT NULL,
    precio DECIMAL(10, 2) NOT NULL,
    PRIMARY KEY (pedido_id, producto_id)
);

-- Tabla de Inventario
CREATE TABLE Inventario (
    producto_id INT REFERENCES Productos(id),
    cantidad INT NOT NULL,
    PRIMARY KEY (producto_id)
);

  1. Relaciones y Claves Foráneas

Las relaciones y claves foráneas son cruciales para mantener la integridad referencial en la base de datos. En el diseño anterior, hemos utilizado claves foráneas para conectar las tablas de manera lógica.

  • Usuarios y Carrito: Un usuario puede tener múltiples carritos.
  • Carrito y Carrito_Productos: Un carrito puede contener múltiples productos.
  • Usuarios y Pedidos: Un usuario puede realizar múltiples pedidos.
  • Pedidos y Pedido_Productos: Un pedido puede contener múltiples productos.
  • Productos y Inventario: Cada producto tiene una entrada en el inventario.

  1. Consultas Comunes

A continuación, se presentan algunas consultas comunes que podrías necesitar en una aplicación de comercio electrónico.

Obtener Productos por Categoría

SELECT p.nombre, p.descripcion, p.precio
FROM Productos p
JOIN Categorias c ON p.categoria_id = c.id
WHERE c.nombre = 'Electrónica';

Obtener el Carrito de un Usuario

SELECT p.nombre, cp.cantidad, p.precio
FROM Carrito_Productos cp
JOIN Productos p ON cp.producto_id = p.id
JOIN Carrito c ON cp.carrito_id = c.id
WHERE c.usuario_id = 1;

Obtener el Historial de Pedidos de un Usuario

SELECT p.id, p.fecha_pedido, p.estado
FROM Pedidos p
WHERE p.usuario_id = 1;

  1. Ejercicios Prácticos

Ejercicio 1: Añadir un Producto al Carrito

Instrucciones: Escribe una consulta SQL para añadir un producto al carrito de un usuario.

-- Solución
INSERT INTO Carrito_Productos (carrito_id, producto_id, cantidad)
VALUES (1, 2, 3);

Ejercicio 2: Actualizar la Cantidad de un Producto en el Carrito

Instrucciones: Escribe una consulta SQL para actualizar la cantidad de un producto en el carrito de un usuario.

-- Solución
UPDATE Carrito_Productos
SET cantidad = 5
WHERE carrito_id = 1 AND producto_id = 2;

Ejercicio 3: Eliminar un Producto del Carrito

Instrucciones: Escribe una consulta SQL para eliminar un producto del carrito de un usuario.

-- Solución
DELETE FROM Carrito_Productos
WHERE carrito_id = 1 AND producto_id = 2;

Conclusión

En esta sección, hemos cubierto el diseño de una base de datos para una aplicación de comercio electrónico, desde los requisitos del sistema hasta la creación de tablas y relaciones. También hemos visto algunas consultas comunes y ejercicios prácticos para reforzar los conceptos aprendidos. Con esta base, estarás preparado para diseñar y gestionar bases de datos más complejas en PostgreSQL.

Curso de PostgreSQL

Módulo 1: Introducción a PostgreSQL

Módulo 2: Operaciones Básicas de SQL

Módulo 3: Consultas Avanzadas de SQL

Módulo 4: Diseño de Bases de Datos y Normalización

Módulo 5: Características Avanzadas de PostgreSQL

Módulo 6: Ajuste de Rendimiento y Optimización

Módulo 7: Seguridad y Gestión de Usuarios

Módulo 8: Trabajando con JSON y Características NoSQL

Módulo 9: Extensiones y Herramientas Avanzadas

Módulo 10: Estudios de Caso y Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados