La base de datos "inventario" se diseña considerando las normativas venezolanas para
facturación (Providencia Administrativa SNAT/2024/000102 y normas previas como la
Providencia 0257/2008, actualizadas por el SENIAT). Esto incluye campos obligatorios
para facturas como RIF del cliente, descripción de productos, cantidades, precios, IVA
(alícuota estándar del 16%), totales, fecha, y consideraciones para moneda (Bs o USD, dada
la permisividad en divisas extranjeras en Venezuela). Los "factores externos" en ventas y
facturación se contemplan con campos para IVA, moneda y tasa de cambio (influenciada
por regulaciones del BCV). Para clientes, se incluye RIF (obligatorio para contribuyentes) y
datos básicos para identificación fiscal.
Las tablas están relacionadas mediante claves primarias y foráneas para mantener
integridad referencial: "ventas" referencia a "clientes" y "almacen" para asociar ventas con
clientes y productos. La tabla "ventas" actúa como detalle de líneas de factura, permitiendo
múltiples ítems por número de factura (agrupados por "numero_factura"), lo que permite
control de inventario y generación de facturas completas sin necesidad de tablas
adicionales, cumpliendo con el requisito de solo 3 tablas.
Campo Tipo Restricciones Descripción
Identificador único del
id_almacen INT PK, AUTO_INCREMENT
producto
nombre VARCHAR(100) NOT NULL Nombre del producto
Descripción detallada
descripcion TEXT
requerida en facturas
stock INT DEFAULT 0 Cantidad disponible
precio_unitario DECIMAL(10,2) NOT NULL Precio base del producto
IVA estándar en
alicuota_iva DECIMAL(5,2) DEFAULT 16.00
Venezuela
unidad_medida VARCHAR(50) Unidad de medida
Tabla: clientes (Datos de clientes)
Incluye datos fiscales obligatorios como RIF para validación tributaria y facturación.
Campo Tipo Restricciones Descripción
id_cliente INT PK, AUTO_INCREMENT Identificador del cliente
razon_social VARCHAR(200) NOT NULL Nombre o razón social
RIF o Cédula (requerido
rif VARCHAR(20) UNIQUE, NOT NULL
por SENIAT)
direccion TEXT NOT NULL Domicilio fiscal
telefono VARCHAR(20) Teléfono de contacto
email VARCHAR(100) Correo electrónico
Tabla: ventas (Datos de facturas)
Esta tabla almacena datos de ventas/facturas, considerando factores externos como IVA,
moneda y tasa de cambio. Cada fila representa un ítem de una factura; múltiples filas con el
mismo "numero_factura" forman una factura completa. Esto permite deducir stock de
"almacen" y generar facturas con totales calculados.
Campo Tipo Restricciones Descripción
PK,
id_venta INT Identificador de la venta
AUTO_INCREMENT
numero_factura VARCHAR(20) NOT NULL Número de factura
fecha DATE NOT NULL Fecha de emisión
id_cliente INT FK Cliente asociado
id_almacen INT FK Producto vendido
cantidad INT CHECK (>0) Cantidad vendida
precio_unitario DECIMAL(10,2) NOT NULL Precio al momento de la venta
subtotal DECIMAL(10,2) NOT NULL cantidad × precio
monto_iva DECIMAL(10,2) NOT NULL IVA calculado
total DECIMAL(10,2) NOT NULL Total por línea
moneda ENUM('BS','USD') DEFAULT 'BS' Tipo de moneda
tasa_cambio DECIMAL(10,2) DEFAULT 1.00 Tasa de cambio
Script SQL para Crear la Base de Datos
Puedes ejecutar este script en phpMyAdmin (incluido en WampServer o XAMPP) para
crear la base de datos y tablas. Asegúrate de que MySQL esté corriendo en localhost.
-- Crear la base de datos
CREATE DATABASE IF NOT EXISTS inventario CHARACTER SET utf8mb4 COLLATE
utf8mb4_general_ci;
USE inventario;
-- Tabla almacen
CREATE TABLE IF NOT EXISTS almacen (
id_almacen INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
descripcion TEXT,
stock INT DEFAULT 0,
precio_unitario DECIMAL(10,2) NOT NULL,
alicuota_iva DECIMAL(5,2) DEFAULT 16.00,
unidad_medida VARCHAR(50)
);
-- Tabla clientes
CREATE TABLE IF NOT EXISTS clientes (
id_cliente INT AUTO_INCREMENT PRIMARY KEY,
razon_social VARCHAR(200) NOT NULL,
rif VARCHAR(20) UNIQUE NOT NULL,
direccion TEXT NOT NULL,
telefono VARCHAR(20),
email VARCHAR(100)
);
-- Tabla ventas
CREATE TABLE IF NOT EXISTS ventas (
id_venta INT AUTO_INCREMENT PRIMARY KEY,
numero_factura VARCHAR(20) NOT NULL,
fecha DATE NOT NULL,
id_cliente INT NOT NULL,
id_almacen INT NOT NULL,
cantidad INT NOT NULL CHECK (cantidad > 0),
precio_unitario DECIMAL(10,2) NOT NULL,
subtotal DECIMAL(10,2) NOT NULL,
monto_iva DECIMAL(10,2) NOT NULL,
total DECIMAL(10,2) NOT NULL,
moneda ENUM('BS', 'USD') DEFAULT 'BS',
tasa_cambio DECIMAL(10,2) DEFAULT 1.00,
FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ON DELETE CASCADE,
FOREIGN KEY (id_almacen) REFERENCES almacen(id_almacen) ON DELETE RESTRICT
);
-- Ejemplo de inserción (opcional, para testing)
INSERT INTO almacen (nombre, descripcion, stock, precio_unitario, unidad_medida) VALUES
('Tornillo', 'Tornillo de acero 5cm', 100, 2.50, 'unidad');
INSERT INTO clientes (razon_social, rif, direccion) VALUES ('Empresa XYZ', 'J-12345678-9', 'Caracas,
Venezuela');
INSERT INTO ventas (numero_factura, fecha, id_cliente, id_almacen, cantidad, precio_unitario,
subtotal, monto_iva, total) VALUES ('FAC-0001', '2026-01-23', 1, 1, 10, 2.50, 25.00, 4.00, 29.00);