Creación de Base de Datos para Tienda Comercial con PostgreSQL

🛒 Cómo Crear una Base de Datos para una Tienda Comercial con PostgreSQL

Bienvenido a esta clase magistral sobre PostgreSQL. Hoy te enseñaremos cómo construir una base de datos completa para una tienda comercial, con ejemplos en SQL y explicaciones visuales. Si eres un desarrollador o simplemente estás interesado en el diseño de bases de datos, ¡sigue leyendo!

Introducción: ¿Por Qué Crear una Base de Datos de Tienda Comercial?

Una base de datos para una tienda comercial ayuda a gestionar productos, clientes, ventas e inventarios de manera centralizada y eficiente. Con esta estructura, podrás realizar consultas rápidas para obtener datos sobre inventario, transacciones y clientes, lo que mejora la organización y facilita la toma de decisiones.

Paso 1: Identificar los Elementos Clave 📊

Primero, pensemos en los elementos esenciales de una tienda:

  • Productos: Artículos en venta.
  • Clientes: Los compradores.
  • Ventas: Las transacciones.
  • Proveedores: Quiénes suministran los productos.
  • Inventario: Control de las existencias.
  • Empleados: Opcional, para registrar quién realizó cada venta.

Diagrama de Entidad-Relación (ERD)

Antes de crear las tablas, podemos visualizar sus relaciones. Aquí tienes un diagrama simplificado:

Diagrama de Entidad-Relación para Tienda Comercial

En este diagrama, se muestra cómo los productos, ventas, clientes y empleados están conectados para facilitar el control en la base de datos.

Paso 2: Creación de Tablas en PostgreSQL 🚀

Tabla de Productos

La primera tabla que necesitamos es la de productos. En esta tabla, guardaremos la información básica de cada producto, incluyendo su precio y proveedor:

CREATE TABLE productos (
    producto_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT,
    precio DECIMAL(10, 2) NOT NULL,
    categoria VARCHAR(50),
    proveedor_id INT,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (proveedor_id) REFERENCES proveedores(proveedor_id)
);

Nota: Aquí, cada producto tiene un producto_id único, y opcionalmente puede estar vinculado a un proveedor_id.

Tabla de Proveedores

Esta tabla almacena la información de cada proveedor que suministra productos:

CREATE TABLE proveedores (
    proveedor_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    direccion TEXT,
    telefono VARCHAR(15),
    email VARCHAR(100),
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Esta tabla ayuda a registrar los contactos de los proveedores y organizar el inventario.

Ejemplo de HTML para Mostrar Proveedores

Puedes visualizar esta tabla de proveedores en un sitio web utilizando una tabla HTML:

<h2>Lista de Proveedores</h2>
<table>
    <tr>
        <th>ID</th>
        <th>Nombre</th>
        <th>Teléfono</th>
        <th>Email</th>
        <th>Dirección</th>
    </tr>
    <!-- Filas de proveedores -->
    <tr>
        <td>1</td>
        <td>Proveedor ABC</td>
        <td>+123456789</td>
        <td>contacto@abc.com</td>
        <td>Calle 123</td>
    </tr>
    <tr>
        <td>2</td>
        <td>Proveedor XYZ</td>
        <td>+987654321</td>
        <td>ventas@xyz.com</td>
        <td>Avenida 456</td>
    </tr>
</table>

Paso 3: Otras Tablas Esenciales

Tabla de Clientes

La tabla de clientes guarda la información de los compradores.

CREATE TABLE clientes (
    cliente_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    direccion TEXT,
    telefono VARCHAR(15),
    email VARCHAR(100),
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Tabla de Ventas

Esta tabla almacena cada transacción realizada. Incluye referencias al cliente y al empleado que realizó la venta:

CREATE TABLE ventas (
    venta_id SERIAL PRIMARY KEY,
    cliente_id INT,
    empleado_id INT,
    fecha_venta TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    total DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id),
    FOREIGN KEY (empleado_id) REFERENCES empleados(empleado_id)
);

Aquí, cada venta se asocia a un cliente y un empleado específico.

Tabla de Detalles de Venta

La tabla de detalles de ventas almacena cada producto incluido en una venta, con la cantidad y precio de cada artículo:

CREATE TABLE detalle_ventas (
    detalle_id SERIAL PRIMARY KEY,
    venta_id INT NOT NULL,
    producto_id INT NOT NULL,
    cantidad INT NOT NULL CHECK (cantidad > 0),
    precio_unitario DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (venta_id) REFERENCES ventas(venta_id) ON DELETE CASCADE,
    FOREIGN KEY (producto_id) REFERENCES productos(producto_id)
);

Ejemplo de HTML para Visualizar Ventas

<h2>Ventas Recientes</h2>
<table>
    <tr>
        <th>ID de Venta</th>
        <th>Cliente</th>
        <th>Fecha</th>
        <th>Total</th>
    </tr>
    <!-- Filas de ventas -->
    <tr>
        <td>1</td>
        <td>Cliente A</td>
        <td>2023-11-04</td>
        <td>$150.00</td>
    </tr>
    <tr>
        <td>2</td>
        <td>Cliente B</td>
        <td>2023-11-05</td>
        <td>$85.50</td>
    </tr>
</table>

Paso 4: Consultas Útiles en PostgreSQL 🔍

1. Productos Disponibles en Inventario

SELECT p.nombre, i.cantidad
FROM productos p
JOIN inventario i ON p.producto_id = i.producto_id
WHERE i.cantidad > 0;

2. Ventas Realizadas en una Fecha Específica

SELECT v.venta_id, v.fecha_venta, c.nombre AS cliente, v.total
FROM ventas v
JOIN clientes c ON v.cliente_id = c.cliente_id
WHERE v.fecha_venta::DATE = '2023-11-04';

3. Reporte de Ventas por Empleado

SELECT e.nombre AS empleado, COUNT(v.venta_id) AS total_ventas, SUM(v.total) AS total_recaudado
FROM empleados e
LEFT JOIN ventas v ON e.empleado_id = v.empleado_id
GROUP BY e.nombre;

Ejemplo de HTML para Mostrar Resultados de Consultas

<h2>Productos Disponibles en Inventario</h2>
<table>
    <tr>
        <th>Nombre del Producto</th>
        <th>Cantidad</th>
    </tr>
    <!-- Filas de productos -->
    <tr>
        <td>Producto X</td>
        <td>25</td>
    </tr>
    <tr>
        <td>Producto Y</td>
        <td>10</td>
    </tr>
</table>

Conclusión 🏆

Crear una base de datos de tienda comercial en PostgreSQL no solo organiza la información sino que facilita su consulta y administración. Esta estructura es básica pero poderosa y puede ampliarse según las necesidades de tu tienda.

¡Ahora tienes la base para gestionar productos, clientes, ventas y más en tu tienda! ¿Listo para llevar tu negocio al siguiente nivel?

¿Te gustaría ver ejemplos adicionales o consultar sobre temas avanzados como triggers o índices? ¡Déjame tus preguntas en los comentarios! 😊