-
Notifications
You must be signed in to change notification settings - Fork 0
Modelo de base de datos del proyecto
Andres Sepulveda edited this page Jun 3, 2024
·
2 revisions
El modelo de base de datos se basa en una serie de tablas que gestionan productos, cotizaciones y usuarios.
- Productos: Almacena información de los productos.
- Cotizaciones: Almacena las cotizaciones realizadas.
- Usuarios: Almacena información de los usuarios.
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)
);
-- 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();