Está en la página 1de 12

Introducción

El presente documento contiene información acerca del proyecto que se realizo para el curso
de bases de datos, el cual consiste en la creación de una base de datos. En nuestro caso se
eligió enfocar dicha base de datos en un Supermercado el cual presenta Vistas de tablas más
útiles, procedimientos almacenados y sus respectivas tablas las cuales abarcan desde un
registro de usuarios, agrupación de roles o funciones administrativas que podrían ser útiles en
una empresa hasta consultas de reportes respecto a la facturación. El modelo relacional
posteriormente mostrado en el documento detallara la utilidad de cada campo además de la
relación entre diferentes tablas con la finalidad de que cada uno de los datos almacenados sea
de utilidad para la empresa y reducir o eliminar la redundancia de datos en todo lo posible. Se
presentan adicionalmente unas consultas las cuales complementan o facilitan el obtener todo
tipo de información que puede ser utilizada en conjunto con un software que gracias a los
procedimientos almacenados se garantiza en buena parte que la base de datos manipulara de
manera segura los datos.

Justificación
Se eligió la base de datos de un supermercado ya que la base de datos de la misma es una
plataforma escalable, es decir; que debido a que esta pensada para un supermercado la
manera en que esta desarrollada puede facilitar desde un pequeño inventario de una tienda
de conveniencia o abarrotería hasta dicho supermercado debido a que puede presentar altas
cargas de ingresos de datos sin corromper las tablas o la estructura de la base de datos.
También se planteo el desarrollo de la misma debido a que si se utiliza posteriormente el
segmento en el que puede ser utilizada es muy amplio, con la finalidad de que si en algún
momento se requiere de un software para tener el control del supermercado esta base de
datos es un excelente punto de partida para tomar en cuenta cada uno de los aspectos a
considerar en el software.
Diagrama entidad-relación (DER)
Diagrama General
Detalles de Tablas
La siguiente información de las tablas esta explicada en orden jerárquico de manera en que a
medida que estén de manera mas descendiente son tablas mas dependientes de las
anteriores. Por ejemplo, el listado de los productos y sus categorías no es posible insertar los
datos si su tabla predecesora productos y categorías aun no existen o no contienen un índice
valido que haga referencia a un producto o a un nombre de la categoría a asignar el producto.

Tabla Roles
Justificación: La tabla de roles tiene como propósito almacenar las funciones o nivel de acceso
dentro de un sistema o el nivel que poseen de empleo dentro de una organización.

Nombre de Tipo Función o propósito


columna
id_rol int (auto incremental) Correlativo e índice de la tabla que es
utilizado para hacer referencia al rol de
manera dinámica en las tablas posteriores
nombre text Contiene el nombre clave del rol
(Administrador, secretaria, Cajero, etc.)
descripcion text Breve descripción de la razón y funciones que
efectúa dicho rol

Tabla Usuarios
Justificación: La tabla de usuarios permite el guardado de cada uno de los empleados de la
organización además de posibles credenciales de acceso para un sistema.

Nombre de Tipo Función o propósito


columna
id_usuario int (auto incremental) Correlativo e índice de la tabla que es
utilizado para hacer referencia al usuario de
manera dinámica en tablas posteriores
nombre text Contiene el nombre del usuario
(Ej.: Juanito Pérez.)
correo_acceso text Correo corporativo, administrativo de acceso
que podría darse a un sistema
pw text Contraseña de acceso. En base de datos de
ejemplo esta se encuentra codificada. NO se
debe de almacenar la contraseña
directamente
rol Int (índice a id_rol de tabla Referencia al índice de rol ubicada en la tabla
roles) Roles
Tabla de Unidades de Medida
Justificación: Contiene información respecto a nombres comunes de unidades de medida que
pueden ser utilizados para la venta de un producto. Pretende solucionar preguntas comunes
por operarios cuando se tiene un sistema además de establecer diferentes precios acordes a
su presentación.

Caso Practico: Coca Cola en unidad se vende a menor precio que un Sixpack.

Nombre de Tipo Función o propósito


columna
Umedida_id int (auto incremental) Correlativo e índice de la tabla que es
utilizado para hacer referencia a la unidad de
medida de manera dinámica en la tabla
productos
nombre text Contiene el nombre de la unidad de medida
(Libra, Docena, Ciento, Quintal.)

Tabla Proveedores
Justificación: Contiene información respecto al proveedor que suministra los productos con la
finalidad de volver a contactarlos para una compra posterior o para reclamos en caso de ser
necesario.

Nombre de Tipo Función o propósito


columna
Id_proveedor int (auto incremental) Correlativo e índice de la tabla que es
utilizado para hacer referencia al proveedor
de manera dinámica en la tabla productos
nombre text Contiene el nombre comercial o común de la
empresa
direccion Text Dirección física o domicilio de la empresa
telefono int Teléfono de atención a clientes por parte del
proveedor

Tabla Productos
Justificación: Almacena información clave del producto que se suministra como empresa al
cliente. Fuertemente relacionada a la tabla de proveedores y unidades de medida para la
generación de reportes posteriores con la información completa de cada producto.

Nombre de Tipo Función o propósito


columna
Id_producto int (auto incremental) Correlativo e índice de la tabla que es
utilizado para hacer referencia al producto de
medida de manera dinámica en las tablas
posteriores
Nombre_comercial text Nombre comercial del producto o
información de venta
Proveedor Int (indice a id_proveedor) Almacena el índice del proveedor al que
pertenece
Descripción Text Información completa del producto, puede
añadirse detalles avanzados acerca del
producto, descripción, publico, etc.
Unidad_medida Int (indice a umedida_id) Almacena el índice a la unidad de medida a la
que pertenece
Precio_unitario double Contiene el valor o precio del producto
tomando en cuenta la presentación del
mismo.

Tabla Categorías
Justificación: En un supermercado es necesario segmentar los productos en categorías o
atributos de manera que sean fácil ubicarlos o restringirlos en caso de ser necesario. También
permite el uso para categorizar mediante departamentos del supermercado

Caso Practico 1: Categoría con nombre “Bebidas Alcohólicas” se restringe la venta a menores
de 18 años.

Caso Practico 2: Categoría con nombre “Congelados” se describe que debe ser mantenido en
refrigeración para preservarlo

Nombre de Tipo Función o propósito


columna
Id_categoria int (auto incremental) Correlativo e índice de la tabla que es
utilizado para hacer referencia a la categoría
a la que pertenece un producto
descripcion text Contiene el nombre corto, descripción breve
o detalles completos de la categoria

Tabla Existencias
Justificación: Cada producto debe de tener un registro de sus existencias además del
responsable que hizo la compra en el momento preciso. Es un listado global de todos los
productos por lo que efectuar las consultas SQL adecuadas y la manipulación de la información
es fundamental para recibir los datos necesarios o lógicos.

Nombre de Tipo Función o propósito


columna
Id_producto int (indice a id_productos) Columna que almacena el indice del producto
relacionado y detallado en la tabla de
productos del cual fue añadida la cantidad en
la transacción.
cantidad text Contiene la cantidad neta de la transacción.
Un sistema informático manipula este campo
y de no existir lo notifica de no disponible
adquirido datetime Momento en el tiempo el cual fue adquirido
el producto desde el proveedor
responsable int Columna que almacena el indice del usuario
perteneciente a la tabla de usuario que de
manera automática es el responsable de
haber realizado la transaccion de compra

Tabla Clientes
Justificación: Almacena la información clave de los clientes para la empresa.

Nombre de Tipo Función o propósito


columna
Id_cliente int (auto incremental) Correlativo e índice de la tabla que es
utilizado para hacer referencia al cliente en
tablas posteriores. Muy importante en ventas
(facturas)
nombre text Contiene el nombre del cliente
direccion text Dirección del cliente
telefono text Teléfono del cliente

Tabla Listado Categorías


Justificación: Se listan el índice de la categoría del producto y el índice del mismo de manera
descendente. De manera en que no se repiten los datos de productos y se complementan con
las categorías. Fundamental elaborar las consultas de manera adecuada para ver las categorías
a las que pertenece un mismo producto.

Caso y ejemplo práctico: El Producto de índice en productos (12) con nombre leche necesita
ser almacenado dentro de la categoría (6) Lácteos y (9) Congelados por lo que la base de datos
solo almacena en una fila id_categoria (6)(12) y en otra (9)(12) respectivamente para
almacenar y registrar el producto en ambas categorías para que sea consultada
posteriormente en un software

Nombre de Tipo Función o propósito


columna
Id_categoria int (indice a id_categoria) Almacena el índice de la categoría
Id_producto Int (indice a id_producto) Almacena el indice del producto

Tabla Facturas
Justificación: Almacena el registro de ventas, salida de inventario o facturación de los
productos. Además de almacenar la responsabilidad o en ese caso de la persona que atendió
en caja al cliente. La información acá almacenada solo es el encabezado de la factura que
posteriormente en la tabla de detalles factura describe cada uno de los artículos llevados por
el cliente y relacionados mediante el índice de la factura otorgado

Nombre de Tipo Función o propósito


columna
Id_factura int (auto incremental) Correlativo e índice de la tabla que es
utilizado para asignar un identificador a la
factura o movimiento generado. Muy
importante tabla de detalles de factura
Id_cliente text Almacena el nombre de la persona que hizo
la compra. IMPORTANTE: No se relaciona
directamente con el índice de cliente y su
información porque esta puede cambiar y un
documento contable como la factura es ilegal
modificar información relacionada a un
documento contable por lo que debe ser
almacenada tal y como fue entregada y
reportada en caso de un software que realice
esta acción.
fecha datetime Marca temporal del momento de la compra
Total double total de la compra. El software debe de
actualizar esta cantidad en base a la
transacción y suma de los subtotales de los
artículos comprados
responsable Int (indice a id_usuario) Almacena el indice de la persona que hizo la
venta en la empresa.

Tabla Detalles de Factura


Nombre de Tipo Función o propósito
columna
Id_factura int (indice a id_factura) Almacena el índice de la factura a la que
pertenece la transacción o detalle de factura.
Se relaciona directamente a id_factura de la
tabla facturas
cantidad int Almacena la cantidad comprada por el cliente
descripcion text Almacena la descripción del producto
comprado por el cliente
Precio_unitario double Almacena el precio de venta del producto.
IMPORTANTE: No se relaciona con el
producto específicamente porque el
producto puede variar y no se debe alterar la
factura o transacción realizada
subtotal double Almacena el total de la transaccion. El
software debe sumar esta columna junto a
todas las que tienen el mismo id_factura para
obtener el total de la venta y actualizar total
ubicado en la tabla facturas. Una vez este
proceso este realizado se debe finalizar la
transaccion.
Creación de la Base de Datos desde Cero
 SE CREA A PARTIR DEL ARCHIVO 0 dentro del ZIP "Esquema base de Datos Supermercado"

USO DE LAS VISTAS DENTRO DE LA BASE DE DATOS


VISTAS DISPONIBLES
 detalles_productos: Muestra todos los detalles del producto uniendo la tabla productos,
proveedores y unidad de medida

 top_clientes: Muestra el id del cliente, su nombre y el total de facturas a su nombre

 top_proveedores: Muestra el id o código de proveedor, su nombre y el total de


productos comprados a la empresa uniendo proveedores y productos

 top_ventas Muestra el id del empleado, su nombre y el total de ventas efectuadas


uniendo facturas y usuarios

 total_productos: Muestra el id del producto, su nombre y la existencia actual del


producto uniendo productos y existencias

Script para el ingreso de datos de forma automatizada


Existen 2 Opciones:

 Mediante un Script Único que contiene toda la información de las tablas.


El Script Único se denomina “0.1 Script para llenar base de datos Supermercado.sql”
 Un Script a la vez para cada tabla en orden correlativo para garantizar que los índices
no se alteren

Consultas complejas para relacionar datos. (10)

 TOP VENTAS

top_ventas AS SELECT u.id_usuario,u.nombre, COUNT(*) AS total_ventas from


usuarios u, facturas f WHERE u.id_usuario=f.responsable group BY u.id_usuario ORDER
BY total_ventas DESC

 DETALLES PRODUCTOS

detalles_productos AS SELECT p.id_producto,p.nombre_comercial,r.nombre AS


proveedor,u.nombre AS unidad_medida FROM productos p,existencias e,proveedores
r,unidades_medida u WHERE p.id_producto=e.id_producto AND
r.id_proveedor=p.proveedor AND p.unidad_medida=u.umedida_id ORDER BY
p.id_producto ASC

 TOTAL PRODUCTOS

total_productos AS SELECT p.id_producto,p.nombre_comercial, e.cantidad FROM


productos p,existencias e WHERE p.id_producto=e.id_producto ORDER BY
p.id_producto ASC

 TOP CLIENTES

top_clientes AS SELECT c.id_cliente,c.nombre, COUNT(*) AS total_compras from


clientes c, facturas f WHERE f.id_cliente=c.id_cliente group BY c.id_cliente ORDER BY
total_compras DESC
 TOP PROVEEDORES

top_proveedores AS SELECT p.id_proveedor,p.nombre, COUNT(*) AS total_compras


from proveedores p, productos pr WHERE p.id_proveedor=pr.proveedor group BY
pr.proveedor ORDER BY total_compras DESC

 OBTENER INFO DE CADA FACTURA POR ORDEN

SELECT d.id_factura,d.cantidad,d.descripcion,d.precio_unitario,d.subtotal FROM


facturas f, detalles_factura d WHERE f.id_factura=d.id_factura ORDER BY d.id_factura
ASC

 OBTIENE FACTURAS EMITIDAS EN 2021

SELECT * from facturas WHERE CAST(fecha AS date) BETWEEN '2021-01-01' AND


'2021-12-31' ORDER BY fecha ASC

 OBTIENE FACTURAS EMITIDAS EN EL MES DE SEPTIEMBRE 2021 CON DATOS DEL


CLIENTE

SELECT f.fecha, u.nombre AS cajero, c.nombre AS cliente, f.total from facturas f,


usuarios u, clientes c WHERE CAST(f.fecha AS date) BETWEEN '2021-09-01' AND '2021-
09-30' and f.responsable=u.id_usuario AND c.id_cliente=f.id_cliente ORDER BY fecha
ASC

 OBTIENE LISTADO DE USUARIOS DEL SISTEMA QUE MAS RECIBEN MERCADERIA

SELECT u.id_usuario,u.nombre, COUNT(*) AS total_compras from usuarios u,


existencias e WHERE u.id_usuario=e.responsable group BY u.id_usuario ORDER BY
total_compras DESC

 OBTIENE TOTAL DE PERSONAS CON DETERMINADO ROL

SELECT r.id_rol,r.nombre,r.descripcion, COUNT(*) AS total_rol from usuarios u, roles r


WHERE u.rol=r.id_rol group BY r.id_rol ORDER BY total_rol DESC

Uso de Funciones (3)


 RESTA (resta en 10 unidades el producto con el identificador 10)
UPDATE existencias SET cantidad=cantidad-10 WHERE id_producto=10

 MAX (Obtiene el producto con mayor existencia)


SELECT e.id_producto,p.nombre_comercial,p.descripcion, max(e.cantidad) AS
producto_maximo FROM existencias e,productos p WHERE
e.id_producto=p.id_producto;

 SUMA (Obtiene el total de ventas por medio de los subtotales de la descripcion de


cada factura)

SELECT SUM(subtotal) AS efectivo_total_ventas FROM detalles_factura;

Vistas de la Base de Datos

 TOP VENTAS

CREATE VIEW

top_ventas AS

SELECT u.id_usuario,u.nombre, COUNT(*) AS total_ventas

from usuarios u, facturas f WHERE u.id_usuario=f.responsable

group BY u.id_usuario ORDER BY total_ventas DESC

 DETALLES PRODUCTOS

CREATE VIEW

detalles_productos AS

SELECT p.id_producto,p.nombre_comercial,r.nombre AS proveedor,u.nombre AS


unidad_medida FROM productos p,existencias e,proveedores r,unidades_medida u

WHERE p.id_producto=e.id_producto AND r.id_proveedor=p.proveedor AND


p.unidad_medida=u.umedida_id ORDER BY p.id_producto ASC

 TOTAL PRODUCTOS

CREATE VIEW

total_productos AS

SELECT p.id_producto,p.nombre_comercial, e.cantidad FROM productos p,existencias


e
WHERE p.id_producto=e.id_producto ORDER BY p.id_producto ASC

 TOP CLIENTES

CREATE VIEW

top_clientes AS

SELECT c.id_cliente,c.nombre, COUNT(*) AS total_compras

from clientes c, facturas f WHERE f.id_cliente=c.id_cliente

group BY c.id_cliente ORDER BY total_compras DESC

 TOP PROVEEDORES

CREATE VIEW

top_proveedores AS

SELECT p.id_proveedor,p.nombre, COUNT(*) AS total_compras

from proveedores p, productos pr WHERE p.id_proveedor=pr.proveedor

group BY pr.proveedor ORDER BY total_compras DESC

También podría gustarte