0% encontró este documento útil (0 votos)
4 vistas5 páginas

Solucion SQL

El documento detalla la creación de una base de datos para un sistema de gestión de ventas al por menor, incluyendo módulos para usuarios, roles, proveedores, inventario, clientes y ventas. Se definen tablas específicas como roles, usuarios, proveedores, categorías, productos, clientes, ventas y detalle de ventas, cada una con sus respectivos campos y relaciones. Se enfatiza el uso de tipos de datos adecuados y la implementación de claves foráneas para mantener la integridad referencial.

Cargado por

Manuel Mendoza
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas5 páginas

Solucion SQL

El documento detalla la creación de una base de datos para un sistema de gestión de ventas al por menor, incluyendo módulos para usuarios, roles, proveedores, inventario, clientes y ventas. Se definen tablas específicas como roles, usuarios, proveedores, categorías, productos, clientes, ventas y detalle de ventas, cada una con sus respectivos campos y relaciones. Se enfatiza el uso de tipos de datos adecuados y la implementación de claves foráneas para mantener la integridad referencial.

Cargado por

Manuel Mendoza
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

-- 1.

Creación de la Base de Datos

CREATE DATABASE IF NOT EXISTS db_retail_el_codigo;

USE db_retail_el_codigo;

-- -----------------------------------------------------

-- MÓDULO DE USUARIOS Y ROLES

-- -----------------------------------------------------

-- Tabla Roles: Para diferenciar entre Admin, Cajero, Bodeguero

CREATE TABLE roles (

id_rol INT AUTO_INCREMENT PRIMARY KEY,

nombre_rol VARCHAR(50) NOT NULL UNIQUE, -- Ej: 'Administrador',


'Cajero'

descripcion VARCHAR(200)

);

-- Tabla Usuarios: Quienes acceden al sistema

CREATE TABLE usuarios (

id_usuario INT AUTO_INCREMENT PRIMARY KEY,

nombre_completo VARCHAR(100) NOT NULL,

email VARCHAR(100) NOT NULL UNIQUE,

password_hash VARCHAR(255) NOT NULL, -- Nunca guardar texto


plano

estado BOOLEAN DEFAULT TRUE, -- TRUE = Activo, FALSE = Inactivo

id_rol INT NOT NULL,

CONSTRAINT fk_usuarios_roles FOREIGN KEY (id_rol) REFERENCES


roles(id_rol)

);
-- -----------------------------------------------------

-- MÓDULO DE PROVEEDORES E INVENTARIO

-- -----------------------------------------------------

-- Tabla Proveedores: Quienes nos surten la mercancía

CREATE TABLE proveedores (

id_proveedor INT AUTO_INCREMENT PRIMARY KEY,

nit VARCHAR(20) NOT NULL UNIQUE,

razon_social VARCHAR(100) NOT NULL,

telefono VARCHAR(20),

direccion VARCHAR(150),

email_contacto VARCHAR(100)

);

-- Tabla Categorías: Para organizar los productos (Lácteos, Aseo, Granos)

CREATE TABLE categorias (

id_categoria INT AUTO_INCREMENT PRIMARY KEY,

nombre VARCHAR(50) NOT NULL

);

-- Tabla Productos: El inventario actual

CREATE TABLE productos (

id_producto INT AUTO_INCREMENT PRIMARY KEY,

codigo_barras VARCHAR(50) UNIQUE, -- Vital para usar lector de


códigos

nombre VARCHAR(100) NOT NULL,


descripcion TEXT,

-- IMPORTANTE: Usar DECIMAL para dinero, nunca FLOAT

precio_compra DECIMAL(10, 2) NOT NULL,

precio_venta DECIMAL(10, 2) NOT NULL,

stock_actual INT NOT NULL DEFAULT 0,

stock_minimo INT DEFAULT 5, -- Para alertas de "se está acabando"

id_categoria INT,

id_proveedor INT,

CONSTRAINT fk_prod_cat FOREIGN KEY (id_categoria) REFERENCES


categorias(id_categoria),

CONSTRAINT fk_prod_prov FOREIGN KEY (id_proveedor) REFERENCES


proveedores(id_proveedor)

);

-- -----------------------------------------------------

-- MÓDULO DE CLIENTES

-- -----------------------------------------------------

CREATE TABLE clientes (

id_cliente INT AUTO_INCREMENT PRIMARY KEY,

documento VARCHAR(20) NOT NULL UNIQUE,

nombre_completo VARCHAR(100) NOT NULL,

telefono VARCHAR(20),

direccion VARCHAR(150),

email VARCHAR(100)

-- Aquí podrías agregar un campo "puntos_acumulados" si deseas


fidelización

);
-- -----------------------------------------------------

-- MÓDULO DE CAJA (VENTAS)

-- -----------------------------------------------------

-- Tabla Ventas (Encabezado): DATOS GENERALES de la factura

CREATE TABLE ventas (

id_venta INT AUTO_INCREMENT PRIMARY KEY,

fecha_venta DATETIME DEFAULT CURRENT_TIMESTAMP,

numero_factura VARCHAR(20) UNIQUE, -- Opcional si usas el ID como


factura

total_venta DECIMAL(10, 2) NOT NULL,

metodo_pago ENUM('Efectivo', 'Tarjeta', 'Transferencia') DEFAULT


'Efectivo',

id_usuario INT NOT NULL, -- Qué cajero hizo la venta

id_cliente INT NOT NULL, -- A quién se le vendió (puede ser un cliente


"Genérico")

CONSTRAINT fk_ventas_usu FOREIGN KEY (id_usuario) REFERENCES


usuarios(id_usuario),

CONSTRAINT fk_ventas_cli FOREIGN KEY (id_cliente) REFERENCES


clientes(id_cliente)

);

-- Tabla Detalle de Venta: QUÉ PRODUCTOS se llevaron en esa factura

CREATE TABLE detalle_ventas (

id_detalle INT AUTO_INCREMENT PRIMARY KEY,

id_venta INT NOT NULL,

id_producto INT NOT NULL,

cantidad INT NOT NULL,


-- IMPORTANTE: Precio histórico. Si el producto sube de precio
mañana,

-- esta venta antigua debe conservar el precio al que se vendió hoy.

precio_unitario DECIMAL(10, 2) NOT NULL,

subtotal DECIMAL(10, 2) GENERATED ALWAYS AS (cantidad *


precio_unitario) VIRTUAL,

CONSTRAINT fk_det_venta FOREIGN KEY (id_venta) REFERENCES


ventas(id_venta),

CONSTRAINT fk_det_prod FOREIGN KEY (id_producto) REFERENCES


productos(id_producto)

);

También podría gustarte