Skip to content

Modelo de base de datos del proyecto

Andres Sepulveda edited this page Jun 3, 2024 · 2 revisions

Modelo de Base de Datos

El modelo de base de datos se basa en una serie de tablas que gestionan productos, cotizaciones y usuarios.

Diagrama del Modelo de Base de Datos

Modelo BD

Tablas Principales

  • Productos: Almacena información de los productos.
  • Cotizaciones: Almacena las cotizaciones realizadas.
  • Usuarios: Almacena información de los usuarios.

Esquema SQL

CREATE TABLE IF NOT EXISTS quotations (
    id SERIAL PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    total NUMERIC(10, 2) DEFAULT 0
);

CREATE TABLE IF NOT EXISTS products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    price NUMERIC(10, 2)
);

CREATE TABLE IF NOT EXISTS quotation_items (
    quotation_id INT REFERENCES quotations(id),
    product_id INT REFERENCES products(id),
    quantity INT,
    PRIMARY KEY (quotation_id, product_id)
);

triggers SQL

-- Crear función para calcular el total
CREATE OR REPLACE FUNCTION calculate_total() RETURNS TRIGGER AS $$
BEGIN
    UPDATE quotations
    SET total = (
        SELECT SUM(p.price * qi.quantity)
        FROM quotation_items qi
                 JOIN products p ON qi.product_id = p.id
        WHERE qi.quotation_id = NEW.quotation_id
    )
    WHERE id = NEW.quotation_id;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Crear trigger para ejecutar la función después de cada inserción o actualización en quotation_items
DROP TRIGGER IF EXISTS trg_calculate_total ON quotation_items;
CREATE TRIGGER trg_calculate_total
    AFTER INSERT OR UPDATE ON quotation_items
    FOR EACH ROW EXECUTE FUNCTION calculate_total();