Introduccion
El diseño y la implementación de bases de datos relacionales constituyen un pilar fundamental
en el desarrollo de sistemas de información, ya que permiten almacenar, organizar y recuperar
datos de manera eficiente, segura y consistente. En este trabajo se desarrolló un modelo de
base de datos en PostgreSQL orientado a la gestión de clientes y facturación, aplicando
principios de integridad referencial, normalización y control de calidad de datos mediante el uso
de restricciones (constraints).
El sistema propuesto contempla la creación de las tablas CLIENTE y FACTURA, estableciendo
relaciones entre ellas mediante claves primarias y foráneas, además de la incorporación de
reglas de validación para campos críticos como sexo, estado civil y precios. Asimismo, se realizó
la inserción de datos correspondientes al primer semestre del año 2022 y la creación de vistas
que permiten analizar el comportamiento de compra de los clientes y los productos más
vendidos, facilitando la toma de decisiones a partir de la información almacenada.
Desarrollo
Configuración de la Base de Datos
El script comienza creando una base de datos llamada actividadUtm. Define parámetros
técnicos como la codificación (UTF8) y el idioma (Inglés/[Link].), asegurando que el propietario
sea el usuario postgres.
Estructura de Tablas (Esquema)
Se crean dos tablas relacionadas entre sí:
FACTURA: Almacena los detalles de la venta (producto, cantidad, precio y fecha). Tiene
restricciones de seguridad para evitar que se ingresen cantidades o precios menores o
iguales a cero.
CLIENTE: Almacena la información personal (nombre, dirección, etc.).
o Relación: Está conectada a la tabla FACTURA mediante el campo
numero_factura.
o Validaciones: Incluye "checks" para asegurar que solo se ingresen opciones
válidas en el sexo y el estado civil.
Carga de Datos
El script inserta registros de ejemplo:
10 Facturas: Productos como Laptops, Mouse, Teclados, Monitores e Impresoras.
6 Clientes: Vincula a personas específicas con algunas de las facturas creadas
anteriormente.
Análisis y Reporte (La Vista)
La parte más interesante es la creación de CLIENTE_VISTA. Esta es una "tabla virtual" que realiza
un cálculo complejo automáticamente:
1. Une las tablas de Clientes y Facturas.
2. Calcula el total multiplicado (cantidad * precio) por cada cliente.
3. Filtra por fecha: Solo toma en cuenta compras realizadas en el primer semestre de 2022
(2022-01-01 al 2022-06-30).
4. Filtra por monto: Solo muestra a los clientes que hayan gastado más de $25.
Finalmente, el script ejecuta un SELECT para mostrar los resultados de este reporte.
Tabla factura
Table cliente
Insercion datos table cliente y tabla factura
Creación de vista
Consulta de vista
Script
CREATE DATABASE "actividadUtm"
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'English_United States.1252'
LC_CTYPE = 'English_United States.1252'
LOCALE_PROVIDER = 'libc'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
IS_TEMPLATE = False;
CREATE TABLE FACTURA (
numero_factura INT PRIMARY KEY,
producto VARCHAR(100) NOT NULL,
cantidad INT NOT NULL CHECK (cantidad > 0),
precio NUMERIC(10,2) NOT NULL CHECK (precio > 0),
fecha_factura DATE NOT NULL
);
CREATE TABLE CLIENTE (
id_cliente INT PRIMARY KEY,
numero_factura INT NOT NULL,
nombres VARCHAR(100) NOT NULL,
direccion VARCHAR(150),
telefono VARCHAR(20),
correo VARCHAR(100),
sexo VARCHAR(10) NOT NULL,
estado_civil VARCHAR(15) NOT NULL,
CONSTRAINT fk_factura
FOREIGN KEY (numero_factura)
REFERENCES FACTURA(numero_factura),
CONSTRAINT chk_sexo
CHECK (sexo IN ('Femenino', 'Masculino', 'Otro')),
CONSTRAINT chk_estado_civil
CHECK (estado_civil IN ('Casado', 'Divorciado', 'Soltero',
'Viudo'))
);
INSERT INTO FACTURA VALUES
(1001, 'Laptop', 1, 800, '2022-01-10'),
(1002, 'Mouse', 2, 20, '2022-02-15'),
(1003, 'Teclado', 1, 35, '2022-03-20'),
(1004, 'Monitor', 1, 200, '2022-04-05'),
(1005, 'Impresora', 1, 150, '2022-05-18'),
(1006, 'Mouse', 1, 20, '2022-06-01'),
(1007, 'Laptop', 1, 800, '2022-06-10'),
(1008, 'Teclado', 2, 35, '2022-06-15'),
(1009, 'Mouse', 3, 20, '2022-06-20'),
(1010, 'Monitor', 1, 200, '2022-06-25');
INSERT INTO CLIENTE VALUES
(1, 1001, 'Juan Pérez', 'Av. Quito 123', '099111222', 'juan@[Link]',
'Masculino', 'Soltero'),
(2, 1002, 'María Gómez', 'Calle Loja 456', '098333444', 'maria@[Link]',
'Femenino', 'Casado'),
(3, 1003, 'Carlos Ruiz', 'Av. Amazonía 789', '097555666',
'carlos@[Link]', 'Masculino', 'Divorciado'),
(4, 1006, 'Ana Torres', 'Calle Bolívar 321', '096777888', 'ana@[Link]',
'Femenino', 'Soltero'),
(5, 1007, 'Luis Morales', 'Av. Colón 654', '095999000', 'luis@[Link]',
'Masculino', 'Casado'),
(6, 1009, 'Sofía Herrera', 'Calle Sucre 987', '094123456',
'sofia@[Link]', 'Otro', 'Viudo');
CREATE VIEW CLIENTE_VISTA AS
SELECT
[Link],
[Link],
[Link],
[Link],
SUM([Link] * [Link]) AS total_compras
FROM CLIENTE c
JOIN FACTURA f ON c.numero_factura = f.numero_factura
WHERE f.fecha_factura BETWEEN '2022-01-01' AND '2022-06-30'
GROUP BY [Link], [Link], [Link], [Link]
HAVING SUM([Link] * [Link]) > 25;
SELECT * FROM CLIENTE_VISTA;
Conclusiones
La aplicación de claves primarias, claves foráneas y restricciones CHECK garantiza la
integridad y consistencia de los datos, evitando registros inválidos y asegurando
relaciones correctas entre las tablas CLIENTE y FACTURA, lo cual es esencial para la
confiabilidad del sistema de información.
El uso de vistas en PostgreSQL demostró ser una herramienta eficaz para simplificar
consultas complejas, permitiendo extraer información relevante como clientes con
mayor volumen de compras y productos más vendidos en un período específico, sin
necesidad de repetir lógica SQL avanzada en cada consulta.
La correcta delimitación temporal de los datos al primer semestre de 2022 permitió
realizar análisis precisos y controlados, evidenciando la importancia de filtrar
adecuadamente la información en procesos de análisis y generación de reportes,
especialmente en sistemas de facturación y gestión comercial.