Sei sulla pagina 1di 30

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

E.A.P. INGENIERÍA DE SISTEMAS

BASE DE DATOS I

PROFESOR: MARCOS SOTELO BEDÓN


INTEGRANTES:
CARRILLO DELGADO CARLOS AARON 17200061
CABELLO CORDOVA RONAL JAIRO 17200040
BERNILLA CAMPOS JUAN DAVID 17200018

2019
Contenido
Contenido ................................................................................................................................................ 1
INTRODUCIÓN ......................................................................................................................................... 2
RESUMEN ............................................................................................................................................ 2
OBJETIVOS ........................................................................................................................................... 3
MARCO TEORICO ................................................................................................................................. 3
BASE DE DATOS ............................................................................................................................... 3
MODELO DE BASE DE DATOS .......................................................................................................... 3
QUERYS ............................................................................................................................................ 7
STORE PROCEDURE ......................................................................................................................... 8
TRIGGERS ......................................................................................................................................... 8
TRANSACCIONES.............................................................................................................................. 8
DESARROLLO ......................................................................................................................................... 10
DESCRIPCION BREVE DEL PROYECTO ................................................................................................ 10
MODELO E-R ...................................................................................................................................... 11
QUERYS .............................................................................................................................................. 12
STORE PROCEDURE ........................................................................................................................... 21
TRIGGERS ........................................................................................................................................... 22
TRANSACCIONES ............................................................................................................................... 23
VISTAS................................................................................................................................................ 24
CONCLUSIONES ..................................................................................................................................... 28
BIBLIOGRAFÍA ........................................................................................................................................ 29

1
INTRODUCIÓN

RESUMEN

Actualmente las empresas y negocios, en su lucha por tener una mayor


participación en el mercado, recurren al uso de aplicaciones informáticas para
hacer más eficientes sus procesos.
Una de las aplicaciones más importantes en la gestión administrativa son las
bases de datos aplicadas al sistema de ventas para hacer el control y registro de
todas las transacciones comerciales en forma precisa y en tiempo real.
Las bases de datos aplicadas a un sistema de ventas pueden ofrecer además
reportes detallados sobre aspectos diversos como conocer la productividad de
una sucursal, obtener información sobre sus proveedores, el crecimiento de
ventas en un periodo determinado, entre otros aspectos que ayude a la toma de
decisiones adecuada y oportuna.
El presente informe redacta el funcionamiento de la base de datos, tanto en
estructura como en sus operaciones, en relación con la idea de negocio como
también en el tema económico.
Para este proyecto usamos el lenguaje sql y el IDE que elegimos es Workbench
8.0.

2
OBJETIVOS

1. Realizar el diseño de la base de datos para un sistema de ventas.


2. Establecer las relaciones pertinentes entre las distintas tablas.
3. Búsqueda y ordenamiento según diferentes criterios (clientes, productos,
proveedores, sucursal, etc.)

MARCO TEORICO

BASE DE DATOS

El término de bases de datos fue escuchado por primera vez en 1963, en un


simposio celebrado en California, USA. Una base de datos se puede definir como
un conjunto de información relacionada que se encuentra agrupada o
estructurada.
Desde el punto de vista informático, la base de datos es un sistema formado por
un conjunto de datos almacenados en discos que permiten el acceso directo a
ellos y un conjunto de programas que manipulen ese conjunto de datos.
Cada base de datos se compone de una o más tablas que guarda un conjunto de
datos. Cada tabla tiene una o más columnas y filas. Las columnas guardan una
parte de la información sobre cada elemento que queramos guardar en la tabla,
cada fila de la tabla conforma un registro.
MODELO DE BASE DE DATOS

Un modelo de base de datos muestra la estructura lógica de la base, incluidas


las relaciones y limitaciones que determinan cómo se almacenan los datos y
cómo se accede a ellos. Los modelos de bases de datos individuales se diseñan
en base a las reglas y los conceptos de cualquier modelo de datos más amplio
que los diseñadores adopten. La mayoría de los modelos de datos se pueden
representar por medio de un diagrama de base de datos acompañante.
MODELO RELACIONAL

3
Siendo el modelo más común, el modelo relacional ordena los datos en tablas,
también conocidas como relaciones, cada una de las cuales se compone de
columnas y filas. Cada columna enumera un atributo de la entidad en cuestión,
por ejemplo, precio, código postal o fecha de nacimiento. En conjunto, a los
atributos en una relación se los llama dominio. Se elige un atributo particular o
combinación de atributos como clave primaria, a la cual se puede hacer
referencia en otras tablas, en donde se la denomina clave externa.
Cada fila, también denominada tupla, incluye datos sobre una instancia
específica de la entidad en cuestión, por ejemplo, un empleado específico.

4
El modelo también representa los tipos de relaciones entre esas tablas, incluidas
las relaciones uno a uno, uno a muchos y muchos a muchos. Este es un ejemplo:

Dentro de la base de datos, las tablas se pueden normalizar, es decir, hacer que
cumplan las reglas de normalización que hacen a la base de datos flexible,
adaptable y escalable. Al estar normalizada, cada porción de los datos es
atómica, es decir, está dividida en partes útiles lo más pequeñas posibles.
Las bases relacionales generalmente se escriben en Lenguaje de Consulta
Estructurado (SQL, por sus siglas en inglés). El modelo fue introducido por E. F.
Codd en 1970.

5
MODELO JERARQUICO

El modelo jerárquico organiza los datos en una estructura de árbol, en la que


cada registro tiene un único elemento o raíz. Los registros del mismo nivel se
clasifican en un orden específico. Ese orden se usa a manera de orden físico para
almacenar la base de datos. El modelo es bueno para describir muchas relaciones
del mundo real.

Este modelo fue usado principalmente por los Sistemas de Gestión de


Información de IBM en las décadas de 1960 y 1970, pero raramente se los ve en
la actualidad debido a ciertas ineficiencias operativas.
MODELO ENTIDAD-RELACION

Este modelo capta las relaciones entre entidades del mundo real de forma muy
similar al modelo de red, pero no está directamente ligado a una estructura física
de la base de datos. En cambio, con frecuencia se lo usa para diseñar una base
de datos conceptualmente.

6
Aquí, a las personas, lugares y cosas, acerca de las cuales se almacenan puntos
de datos, se las denomina entidades, cada una de las cuales tiene ciertos
atributos que en conjunto forman su dominio. La cardinalidad, o relaciones entre
entidades, también se representa en diagramas.

Una forma común del diagrama entidad-relación ER es el esquema de estrella,


en el cual una tabla central de información se conecta a múltiples tablas
dimensionales.
QUERYS

El estándar para la gestión de bases de datos es el Lenguaje de consulta


estructurado (SQL, Structured Query Language). Cabe recalcar que SQL no es lo
mismo que MySQL: el primero es el lenguaje de consulta, el segundo es el
software que usa ese lenguaje. Si bien es cierto que SQL es la opción más popular
entre los programas de bases de datos, definitivamente no es la única. Otras
opciones son AQL, Datalog y DMX.
En cualquier caso, estos lenguajes facilitan la comunicación con la base de datos.
Con SQL puedes escribir las consultas SQL SELECT o SQL ACTION. Como sugiere
su nombre, SQL SELECT te permite seleccionar partes de tus datos, y SQL ACTION
permite realizar operaciones orientadas a la acción, como eliminar e insertar
datos, actualizar valores y crear nuevas tablas.

7
STORE PROCEDURE

Un procedimiento almacenado es un código SQL preparado que puede guardar,


por lo que el código puede reutilizarse una y otra vez.
Entonces, si tiene una consulta SQL que escribe una y otra vez, guárdela como
un procedimiento almacenado y luego llámela para ejecutarla.
También puede pasar parámetros a un procedimiento almacenado, de modo
que el procedimiento almacenado pueda actuar en función de los valores de
parámetro que se pasan.

TRIGGERS
Un trigger es un conjunto de acciones que se ejecutan automáticamente cuando
se realiza una operación de cambio especificada (instrucción SQL INSERT,
UPDATE o DELETE) en una tabla específica. Los desencadenadores son útiles para
tareas tales como hacer cumplir las reglas comerciales, validar los datos de
entrada y mantener un seguimiento de auditoría.

TRANSACCIONES

8
Una transacción es un conjunto de operaciones Transact SQL que se ejecutan
como un único bloque, es decir, si falla una operación Transact SQL fallan todas.
Si una transacción tiene éxito, todas las modificaciones de los datos realizadas
durante la transacción se confirman y se convierten en una parte permanente
de la base de datos. Si una transacción encuentra errores y debe cancelarse o
revertirse, se borran todas las modificaciones de los datos.

PERMISOS DE OBJETO

Concede permisos para una tabla, vista, función con valores de tabla,
procedimiento almacenado, procedimiento almacenado extendido, función
escalar, función de agregado, cola de servicio o sinónimo.

9
DESARROLLO

DESCRIPCION BREVE DEL PROYECTO

La siguiente base de datos almacena información de supermercados. En el


modelado se visualiza 20 tablas relacionadas que indican las ventas, compras,
sucursales y más acerca de lo que sucede en los supermercados. Nuestra base
de datos consiste en que existen varios supermercados, el cual cada uno tiene
una o varias sucursales. Presenta una tabla PERSONA que almacena la
información general de una persona, y esta se va a reutilizar en las tablas
CLIENTE y EMPLEADO; en CLIENTE toma todos los campos de PERSONA y en
EMPLEADO además de los campos anteriores tiene la fecha de contratación y
las horas semanales de trabajo. La tabla CARGO_LABORAL especifica el cargo
laboral, salario y descripción, además de sus llaves foráneas. En USUARIO y
TIPO_USUARIO especifican acerca de los usuarios que pueden acceder al
sistema (esto se puede considerar como parte del login para el ingreso a un
sistema). Las ventas generadas entre el empleado y el cliente se detallan en las
tablas ORDENES, DETALLES_ORDENES y PAGOS. El funcionamiento es el
siguiente: primero se añade una orden, luego en DETALLES_ORDENES se
detallan la cantidad y el producto (el cual puede ser un registro o más) y al final
en pagos calcula el monto que el cliente debe pagar. Para la compra de
productos se realiza de manera similar: se utilizan las tablas COMPRAS,
DETALLES_COMPRA y COSTOS. El proceso es el siguiente: primero inserta en
COMPRAS, luego en DETALLES_COMPRA especifica la cantidad de productos a
comprar y cuales son, al final en COSTOS calcula el monto a pagar. Este proceso
de compra de productos se realiza entre cada sucursal y el proveedor.
Otras tablas adicionales que presenta el modelado son la tabla SEXO, que
almacena el sexo de la persona, la tabla LINEA_PRODUCTO, detalla la línea de
producto a la que pertenece el producto, la tabla CIUDAD, la tabla
DEPARTAMENTO y por último la tabla DESPEDIR_EMPLEADO, esta última no se
visualiza en el modelado, ya que se creó posteriormente, y se utiliza para
almacenar los empleados que fueron despedidos, utilizando un trigger.

10
MODELO E-R

11
QUERYS

1. Top 15 de los clientes que hicieron más compras

SELECT cliente.ID_CLIENTE, persona.NOMBRE_PERSONA, count(ordenes.CODIGO_CLIENTE)


as 'NUMERO_DE_COMPRAS'
FROM cliente
LEFT JOIN ordenes ON ordenes.CODIGO_CLIENTE =cliente.ID_CLIENTE
LEFT JOIN persona ON cliente.PERSONA_ID_PERSONA = persona.DNI_PERSONA
GROUP BY ID_CLIENTE
ORDER BY NUMERO_DE_COMPRAS DESC
LIMIT 15;

Resultado:

2. Antigüedad del empleado con respecto a la fecha actual

SELECT
CONCAT(`persona`.`NOMBRE_PERSONA`,
' ',
`persona`.`APELLIDO_PERSONA`) AS `NOMBRE_EMPLEADO`,
`empleado`.`FECHA_CONTRATACION` AS `FECHA_INICIO_CONTRATO`,
CONCAT(TIMESTAMPDIFF(YEAR,
`empleado`.`FECHA_CONTRATACION`,
CURDATE()),
' ',
'años') AS `ANTIGUEDAD`
FROM
(`empleado`

12
LEFT JOIN `persona` ON ((`empleado`.`PERSONA_ID_PERSONA` =
`persona`.`DNI_PERSONA`)));

Resultado:

3. Total de compras por temporada de mes

SELECT MES,AÑO_2018,AÑO_2019, AÑO_2018+AÑO_2019 AS TOTAL


FROM (SELECT MONTHNAME(FECHA_ORDEN) AS MES
, SUM(IF(YEAR(FECHA_ORDEN)=2018,MONTO,0)) As 'AÑO_2018'
, SUM(IF(YEAR(FECHA_ORDEN)=2019,MONTO,0)) As 'AÑO_2019'
FROM ordenes
LEFT JOIN pagos ON ordenes.NUMERO_ORDENES = pagos.NUMERO_ORDEN
WHERE YEAR(FECHA_ORDEN) between 2018 and 2019
GROUP BY MES) AS M;

Resultado:

4. Calcula el tiempo que le queda a los productos para caducar, y a cada uno le da un estado de
acuerdo con el tiempo de caducidad

SELECT producto.NOMBRE_PRODUCTO,producto.FECHA_VENCIMIENTO,

CASE

13
WHEN DATEDIFF(`producto`.`FECHA_VENCIMIENTO`,CURDATE())>0 AND
DATEDIFF(`producto`.`FECHA_VENCIMIENTO`,CURDATE())<150 THEN "OFERTA"
WHEN DATEDIFF(`producto`.`FECHA_VENCIMIENTO`,CURDATE())>150 THEN "NORMAL"
WHEN DATEDIFF(`producto`.`FECHA_VENCIMIENTO`,CURDATE())<0 THEN "VENCIDO"
END AS ESTADO
FROM producto;

Resultado:

5. Calcula el salario neto del mes de julio, cuyo mes tiene por bonificación un 50% a empleados
que tienen igual o más salario de 1500, caso contrario se le bonifica con 25%

SELECT CONCAT(persona.NOMBRE_PERSONA,' ',persona.APELLIDO_PERSONA) AS


NOMBRE_EMPLEADO, cargo_laboral.CARGO_LABORAL,
CASE
WHEN cargo_laboral.SALARIO_MENSUAL>=1500 THEN
cargo_laboral.SALARIO_MENSUAL + 0.50*cargo_laboral.SALARIO_MENSUAL
WHEN cargo_laboral.SALARIO_MENSUAL<1500 THEN cargo_laboral.SALARIO_MENSUAL +
0.25*cargo_laboral.SALARIO_MENSUAL
END AS SALARIO_BONIFICACION_FIESTAS_PATRIAS

FROM empleado LEFT JOIN persona ON empleado.PERSONA_ID_PERSONA =


persona.DNI_PERSONA
LEFT JOIN cargo_laboral ON empleado.ID_CARGO_LABORAL_EMPLEADO =
cargo_laboral.ID_CARGO_LABORAL;

Resultado:

14
6. Calcula el salario neto de los empleados por trienios

SELECT CONCAT(persona.NOMBRE_PERSONA,' ',persona.APELLIDO_PERSONA) AS


NOMBRE_EMPLEADO,
CASE
WHEN TIMESTAMPDIFF(YEAR,empleado.FECHA_CONTRATACION,CURDATE())>=3 AND
TIMESTAMPDIFF(YEAR,empleado.FECHA_CONTRATACION,CURDATE())<6 THEN
cargo_laboral.SALARIO_MENSUAL+0.1*cargo_laboral.SALARIO_MENSUAL
WHEN TIMESTAMPDIFF(YEAR,empleado.FECHA_CONTRATACION,CURDATE())>=6 AND
TIMESTAMPDIFF(YEAR,empleado.FECHA_CONTRATACION,CURDATE())<9 THEN
cargo_laboral.SALARIO_MENSUAL+0.2*cargo_laboral.SALARIO_MENSUAL
WHEN TIMESTAMPDIFF(YEAR,empleado.FECHA_CONTRATACION,CURDATE())>=9 AND
TIMESTAMPDIFF(YEAR,empleado.FECHA_CONTRATACION,CURDATE())<15 THEN
cargo_laboral.SALARIO_MENSUAL+0.25*cargo_laboral.SALARIO_MENSUAL
END AS SALARIO_NETO_POR_TRIENIOS
FROM
empleado
LEFT JOIN persona ON empleado.PERSONA_ID_PERSONA = persona.DNI_PERSONA
LEFT JOIN cargo_laboral ON empleado.ID_CARGO_LABORAL_EMPLEADO =
cargo_laboral.ID_CARGO_LABORAL;

Resultado:

15
7. Muestra el producto más vendido

SELECT producto.NOMBRE_PRODUCTO, COUNT(detalles_ordenes.NUM_ORDEN) AS


VECES_VENDIDAS
FROM producto
LEFT JOIN detalles_ordenes ON producto.ID_PRODUCTO = detalles_ordenes.ID_PRODUCTO;

Resultado:

8. Muestra los productos , su ganancia por unidad y ganancia total

SELECT producto.NOMBRE_PRODUCTO , ROUND( producto.PRECIO_VENTA-


producto.PRECIO_COMPRA,2) AS GANANCIA_X_UNIDAD,
detalles_ordenes.CANTIDAD_PEDIDA AS CANTIDAD,
ROUND((producto.PRECIO_VENTA-
producto.PRECIO_COMPRA)*(detalles_ordenes.CANTIDAD_PEDIDA),2) AS
GANANCIA_X_PRODUCTO
FROM producto
LEFT JOIN detalles_ordenes ON producto.ID_PRODUCTO = detalles_ordenes.ID_PRODUCTO
WHERE detalles_ordenes.CANTIDAD_PEDIDA IS NOT NULL;

Resultado:

16
9. TOP 5 de los supermercados y sucursales correspondientes que poseen mayor cantidad de
ventas

SELECT supermercado.NOMBRE_SUPERMERCADO AS SUPERMERCADO


,ciudad.NOMBRE_CIUDAD AS SEDE ,COUNT(pagos.ID_SUCURSAL_PAGO) AS CANTIDAD_VENTAS

FROM sucursal

LEFT JOIN supermercado ON supermercado.ID_SUPERMERCADO = sucursal.ID_SUPER

LEFT JOIN ciudad ON ciudad.ID_CIUDAD = sucursal.ID_CIUDAD_SUCURSAL

LEFT JOIN pagos ON pagos.ID_SUCURSAL_PAGO =sucursal.ID_SUCURSAL

GROUP BY SEDE

ORDER BY CANTIDAD_VENTAS DESC

LIMIT 5;

Resultado:

10. Cantidad de sucursales que tiene cada supermercado

select supermercado.NOMBRE_SUPERMERCADO,COUNT(*) as CANTIDAD_SUCURSALES


FROM sucursal
inner join supermercado on sucursal.ID_SUPER=supermercado.ID_SUPERMERCADO
group by NOMBRE_SUPERMERCADO;

Resultado:

17
11. Empleados que ganan menos que la media de todos los salarios del total de empleados

create view SALARIO_EMPLEADO as


select concat(persona.NOMBRE_PERSONA,' ',persona.APELLIDO_PERSONA) AS
EMPLEADO,cargo_laboral.SALARIO_MENSUAL
FROM empleado inner join persona on
empleado.PERSONA_ID_PERSONA=persona.DNI_PERSONA
INNER JOIN cargo_laboral on
empleado.ID_CARGO_LABORAL_EMPLEADO=cargo_laboral.ID_CARGO_LABORAL;

SELECT * FROM SALARIO_EMPLEADO WHERE SALARIO_MENSUAL<= (SELECT


AVG(SALARIO_MENSUAL) FROM SALARIO_EMPLEADO
ORDER BY SALARIO_MENSUAL);

Resultado:

12. Número de ventas que ha atendido cada empleado

SELECT CONCAT(persona.NOMBRE_PERSONA,' ',persona.APELLIDO_PERSONA) AS


NOMBRE_EMPLEADO ,COUNT(pagos.MONTO) AS NUMERO_VENTAS
FROM empleado
LEFT JOIN persona ON empleado.PERSONA_ID_PERSONA = persona.DNI_PERSONA
LEFT JOIN ordenes ON empleado.ID_EMPLEADO =
ordenes.CODIGO_EMPLEADO
LEFT JOIN pagos ON ordenes.NUMERO_ORDENES = pagos.ID_PAGOS
GROUP BY NOMBRE_EMPLEADO;

Resultado:

18
13. Muestra las ventas generadas por temporada

select case when month(FECHA_ORDEN)>=1 AND MONTH(FECHA_ORDEN)<=3 THEN


"VERANO"
when month(FECHA_ORDEN)>=4 AND MONTH(FECHA_ORDEN)<=6 THEN "OTOÑO"
when month(FECHA_ORDEN)>=7 AND MONTH(FECHA_ORDEN)<=9 THEN "INVIERNO"
when month(FECHA_ORDEN)>=10 AND MONTH(FECHA_ORDEN)<=12 THEN "PRIMAVERA"
end as TEMPORADA,count(ordenes.NUMERO_ORDENES) as CANTIDAD_VENTAS
FROM ordenes group by TEMPORADA;

Resultado:

14. Muestra las sucursales que necesitan abastecimiento de productos, las que tienen menor
cantidad en stock de productos

select p.NOMBRE_PRODUCTO,
IF(STOCK<350,'Necesita','No necesita') as E_STOCK,
superm.NOMBRE_SUPERMERCADO
from producto as p
left join sucursal as s
on p.ID_SUCURSAL_PRODUCTO=s.ID_SUCURSAL
LEFT join supermercado as superm
on s.ID_SUPER=superm.ID_SUPERMERCADO;

Resultado:

19
15. Muestra la cantidad total de productos que cada proveedor debe abastecer

select p.NOMBRE_PROVEEDOR AS nombre,


SUM(d_co.CANTIDAD_COMPRA) as cantidad
from proveedor as p
left join compras as c
on c.PROVEEDOR_ID=p.ID_PROVEEDOR
LEFT join detalles_compra as d_co
on c.ID_COMPRAS=d_co.ORDENES_NUM
GROUP BY nombre;

Resultado:

16. Muestra los costos que generaron por la compra a cada proveedor

select p.NOMBRE_PROVEEDOR AS nombre,


SUM(d_co.CANTIDAD_COMPRA*pro.PRECIO_COMPRA) as TOTALPAGAR
from proveedor as p
left join compras as c
on c.PROVEEDOR_ID=p.ID_PROVEEDOR
LEFT join detalles_compra as d_co
on c.ID_COMPRAS=d_co.ORDENES_NUM
left join producto as pro
on d_co.ID_PRODUCTO=pro.ID_PRODUCTO
GROUP BY nombre;

Resultado:

20
STORE PROCEDURE
1. El sp muestra el usuario y contraseña de los empleados, para ello se debe ingresar el DNI del
empleado

CREATE DEFINER=`root`@`localhost` PROCEDURE `mostrar_usuarios`(


in dni_empleado int
)
BEGIN
select usuario.NOMBRE_USUARIO,usuario.PASSWORD_USUARIO FROM usuario
where ID_PERSONA_USUARIO=dni_empleado;
END

Resultado:

21
2. Muestra la cantidad de productos que existen por cada línea de producto

CREATE DEFINER=`root`@`localhost` PROCEDURE `productosxlinea`(in COD_LINEA int)


BEGIN
select producto.NOMBRE_PRODUCTO,count(*) as CANTIDAD from producto where
ID_LINEA_PRODUCT=COD_LINEA group by ID_LINEA_PRODUCT;
END

Resultado:

TRIGGERS

1. El trigger se dispara después de insertar en la tabla detalles_compra. Después de ello,


actualiza el stock, aumentando a cada producto que se hizo la compra

delimiter $$
create trigger controlstockcompra
after insert on detalles_compra
for each row
begin
update producto set producto.STOCK=producto.STOCK+new.CANTIDAD_COMPRA
where producto.ID_PRODUCTO=new.ID_PRODUCTO;

22
END$$
delimiter ;

2. El trigger se dispara después de insertar en la tabla detalles_ordenes. Después de ello,


actualiza stock, disminuyendo la cantidad de productos de la tabla producto

delimiter $$
create trigger controlstock
after insert on detalles_ordenes
for each row
begin
update producto set producto.STOCK=producto.STOCK-new.CANTIDAD_PEDIDA
where producto.ID_PRODUCTO=new.ID_PRODUCTO;
END$$
delimiter ;

3. El trigger se dispara después de eliminar un registro de la tabla empleado

create trigger despedir_empleado after delete on empleado


for each row
INSERT INTO
empleados_despedidos(ID_EMPLOYEE,FECHA_CONTRATACION,FECHA_DESPIDO,HORAS_LAB
ORALES_MENSUALES,ID_CARGO_LABORAL,ID_SUCURSAL,PERSONA_ID,USUARIO)
values(OLD.ID_EMPLEADO,OLD.FECHA_CONTRATACION,'2019-06-
30',OLD.HORAS_LABORALES_MENSUALES_EMPLEADO,OLD.ID_CARGO_LABORAL_EMPLEAD
O,OLD.ID_SUCURSAL_EMPLEADO,OLD.PERSONA_ID_PERSONA,current_user());

TRANSACCIONES

1. Esta transacción utiliza 3 tablas: ordenes, detalles_ordenes y pagos. Primero capta la última
orden que se realizó, luego aumenta en uno para añadirlo en el siguiente registro.
Insertamos un registro en ordenes, también en detalles_ordenes. Por último, calculamos el
monto total de pago, para ello anteriormente se creó una vista, el cual guarda la cantidad
pedida por el cliente, el precio del producto y la orden a la que pertenece; insertamos en la
tabla pagos el total, la id de la sucursal y la orden.

start transaction;
select @num_orden:=max(NUMERO_ORDENES)+1 from ordenes;

insert into
ordenes(NUMERO_ORDENES,FECHA_ORDEN,ESTADO,CODIGO_CLIENTE,CODIGO_EMPLEADO
)
values(@num_orden,'2018-03-07','CANCELADO','12','5');

23
insert into detalles_ordenes(ID_DETALLES,CANTIDAD_PEDIDA,ID_PRODUCTO,NUM_ORDEN)
values('19',4,1,@num_orden),('20',3,2,@num_orden),('21',1,3,@num_orden);

select @total:=sum(PRECIO_VENTA*CANTIDAD_PEDIDA) FROM precio_cantidad_orden


group by NUM_ORDEN;
insert into pagos(ID_PAGOS,MONTO,ID_SUCURSAL_PAGO,NUMERO_ORDEN)
values('8',@total,'27',@num_orden);

commit;

2. Esta transacción es similar a la anterior. La transacción 1 realiza las ventas entre el cliente y
empleado, en este caso vamos a mostrar las ventas que generó cada sucursal con el
proveedor. Utilizamos 3 tablas: compras, detalles_compra y costos. El proceso lo realiza
similar a la transacción anterior:

start transaction;
select @num_compra:=max(ID_COMPRAS)+1 from compras;

INSERT INTO compras(ID_COMPRAS, FECHA_COMPRA, PROVEEDOR_ID, SUCURSAL_ID)


VALUES (@num_compra, '2018-11-16', '506', '28');

insert into
detalles_compra(ID_DET_COMPRA,CANTIDAD_COMPRA,ID_PRODUCTO,ORDENES_NUM)
values('8','29','2',@num_compra),('9','48','4',@num_compra);

select @total:=sum(CANTIDAD_COMPRA*PRECIO_COMPRA) FROM


precio_cantidad_compras group by ID_COMPRAS;
insert into costos(ID_COSTOS,MONTO_TOTAL,ID_COMPRA)
values('4',@total,@num_compra);

commit;

VISTAS
1. Vista que agrupa la cantidad de productos de compra, precio de compra de producto y
numero de compra

create view precio_cantidad_compras as


select
detalles_compra.CANTIDAD_COMPRA,producto.PRECIO_COMPRA,compras.ID_COMPRAS
from detalles_compra inner join producto on
detalles_compra.ID_PRODUCTO=producto.ID_PRODUCTO
inner join compras on detalles_compra.ORDENES_NUM=compras.ID_COMPRAS;
select * from precio_cantidad_compras;

24
2. Vista que agrupa los nombres y apellidos de los clientes y su salario mensual de la tabla
CARGO_LABORAL

create view SALARIO_EMPLEADO as


select concat(persona.NOMBRE_PERSONA,' ',persona.APELLIDO_PERSONA) AS
EMPLEADO,cargo_laboral.SALARIO_MENSUAL
FROM empleado inner join persona on
empleado.PERSONA_ID_PERSONA=persona.DNI_PERSONA
INNER JOIN cargo_laboral on
empleado.ID_CARGO_LABORAL_EMPLEADO=cargo_laboral.ID_CARGO_LABORAL;

3. Vista que agrupa


DNI_EMPLEADO,APELLIDOS,NOMBRES,CARGO_LABORAL,SALARIO_MENSUAL,
FECHA_CONTRATACION, TELEFONO, DIRECCION_RESIDENCIA de las tablas persona y
empleado

25
4. Vista que almacena la cantidad pedida, precio de venta y orden a la que pertenece, con
respecto a la venta entre cliente y empleado

26
CREACIÓN DE USUARIOS

CREATE USER 'AdministradorBaseDatos'@'localhost' IDENTIFIED BY 'administradorbasedatos';

CREATE USER 'Empleados'@'localhost' IDENTIFIED BY 'empleados';

CREATE USER 'Gerente'@'localhost' IDENTIFIED BY 'gerente';

CREATE USER 'EncargadoCompra'@'localhost' IDENTIFIED BY 'encargadocompra';

PERMISOS A LOS USUARIOS

GRANT select

ON bd_supermercado.*

TO 'Gerente'@'localhost';

GRANT INSERT,SELECT,UPDATE,DELETE

ON bd_supermercado.*

TO 'AdministradorBaseDatos'@'localhost';

GRANT select

ON bd_supermercado.empleado

TO 'Gerente'@'localhost';

GRANT select

ON bd_supermercado.producto

TO 'Gerente'@'localhost';

27
CONCLUSIONES

Al concluir nuestro proyecto podemos concluir los siguientes puntos


 Los sistemas de ventas manejan una complejidad alta, es por ello por lo
que la estructura de base de datos debe estar bien definida ya que el
mínimo error en estructura y/o cálculos conlleva a perdidas de dinero,
 También se debe tener en claro que solo cierto tipo de personas ingresen
a la mencionada base de datos, con permisos especiales para ciertos
usuarios para realizar reportes mensuales como variables estadísticas
para la empresa.
 Se plasmó los conocimientos impartidos en clase en un caso real como es
un sistema de ventas.
 La base de datos junto con una interfaz en Java, Python, etc. forman parte
de las aplicaciones en desarrollo avanzado para casos de este tipo.

28
BIBLIOGRAFÍA

 http://www.maestrosdelweb.com/que-son-las-bases-de-datos/
 https://sites.google.com/site/supermercadobasededatos/base-de-datos-
--diagrama
 Gilfillan, I. (s.f.). La Biblia de MySQL. ANAYA.

29

Potrebbero piacerti anche