Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Proyecto Tienda

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 45

INSTITUTO TECNOLÓGICO DE CONKAL

TALLER DE BASE DE DATOS

PRESENTACION DE NUESTRO PROYECTO:


“CONTROL DE INVENTARIO, PRODUCTOS,
PROVEEDORES Y VENTAS DE UNA TIENDA
DE ABARROTES”

ALUMNOS:
AMAYA CEN DAVID EDUARDO
AZCORRA MEDINA GABRIEL DE JESÚS
CHAN TEC BRAYAN RICARDO
UITZ SULÚB PEDRO ANTONIO
DIEGO ALONZO YAM CETINA

FECHA: 01/06/2024
Creación del esquema de la base de datos para una tienda de
abarrotes

Aplicación de los Lenguajes de Definición de Datos(LDD)


✓ CREATE
✓ VIEW
✓ INDEX
✓ DROP
✓ ALTER
Comandos extra:
➢ Show databases: muestra las bases de datos que tenemos
➢ Use nombre_database: es para ingresar a una base de datos(de una para otra)
➢ Show tables: muestra las tablas dentro la base de datos.
➢ Desc nombre_tabla: muestra la tablas con sus campos y valores(solo cuando se
esta dentro de una base de datos)

Comando para ingresar al motor de MySQL desde linea de comando(como root)


CREATE
Usamos el siguiente comando CREATE database tienda_abarrotesor;

Aplicamos el comando SHOW DATABASES. Para verificar que se haya creado.

Entramos a la base de datos tienda_abarrotesor;


Creación de las tablas de la base de datos
Crecioon tabla empleado
Usamos el comando CREATE TABLE nom_tabla;

Le damos un DESC empleado

Creación tabla proveedor


Usando el comando CREATE TABLE proveedor;
Verificamos con un DESC proveedor;

Creación tabla productos


Usando el comando CREATE TABLE productos;

Le damos un DESC productos;


Creacion de la tabla ventas
Usando el comando CREATE TABLE ventas;

DESC ventas;

Verificación

Dentro de nuestra base de datos “tienda_abarrotesor” se crearon cuatro tablas: empleado,


productos, proveedor y ventas, aplicando el CREATE de el lenguaje de definición de datos.
Como siguiente se crearan las vistas y los índices.
VIEW

Creación de las vistas de nuestra base de datos

Creación vista empleado

Creación vista proveedor

Creacion vista productos

Creacion vista ventas

Vistas de la base de datos “tienda_abarrotesor”


INDEX

Creación de índices

Sintaxis: CREATE Index nom_indice on tabla(descripción tabla)

Índice empleado

Índice proveedor

Indice productos

Indice ventas
DROP/ALTER

Eliminamos la columna nom_empresar

La creamos de nuevo

Cambiamos el nombre a la tabla empleado por trabajador


Eliminamos la vista empleado y la creamos con el nuevo nombre

Eliminamos la columna fecha_sal de la tabla productos, ya que sera la misma fecha de


venta
Aplicación del Lenguaje de Manipulación de Datos a nuestro
proyecto

Estos son:

• SELECT: Permite realizar consultas de una o varias tablas.


• INSERT: Se utiliza para insertar registros en una tabla existente.
• UPDATE: Permite modificar uno o varios registros de una tabla.
• DELETE: Elimina uno o varios registros de una tabla.
Comandos básicos(ya practicados):
• Mysql -u root -p : Entrar a MySQL como root.
• Show databases: mostrara las base de datos que tenemos.
• Use nom_bd: entrara a una base de datos
• Show tables: mostrara las tablas que están dentro de una base de datos
• Desc nom_tabla: mostrara la estructura de la tabla(campos, tipo, longitud).
Objetivo:
o Manipular la información de nuestra base de datos.
o Mejorar la toma de decisiones para el beneficio de la tienda.

SELECT

Sintaxis para ver toda la tabla


Sintaxis: SELECT * FROM nom_tabla;
(para consultar la tabla completa)
Sintaxis seleccionar columnas
especificas
SELECT varias columnas SELECT
nom_col1,nom col2 from nom_Tabla
Sintaxis con condicional
SELECT varias columnas SELECT
Para estas practicas usaremos nom_col1,nom col2 from nom_Tabla
nuestras base de datos de where condición1, condicion2.
nuestro proyecto
“tienda_abarrotesor”.
Practica 1: Genera un reporte que contenga la información el nombre de la empresa,
nombre del distribuidor y el teléfono del distribuidor.
➔ Esta información se encuentra en la tabla proveedor.
La sentencia queda de la siguiente forma
➔ SELECT nom_empresa, nom_distribuidor, telefono_p from proveedor;

Tabla Proveedor Salida después de aplicar la


sentencia

Practica 2: Genere un reporte de que contenga el nombre del productos, su precio de


compra y su precio al cual sale a la venta al publico.
➔ La informacion que nos sera util sera, esta en la tabla productos.
La sentencia para este reporte queda de la siguiente manera:
➔ SELECT nom_produc, pre_comp, pre_ vent from productos;

Tabla productos Salida


Practica 3: Genera un reporte que incluya nombre del trabajador, su teléfono y el total de
lo vendido. Ordénalo de manera ascendente.
➔ La información se encuentra en la tabla ventas, trabajador;
La sentencia queda de la siguiente forma:
➔ SELECT nom_emple nombre, telefono, SUM(total_vent) total_vendido
➔ FROM ventas, trabajador
WHERE cod_empleado = cod_empleadofk
GROUP BY nombre, telefono
➔ ORDER BY nombre ASC;

Practica 4: Genere un reporte con el proveedor, nombre del producto, la fecha de entrega y
el precio al que se vendió a la tienda. Ordénalo ascendentemente.
➔ La información se encuentra en la tabla trabajador y productos.
➔ SELECT nom_empresa proveedor, nom_produc producto,fecha_ent
fecha_de_entrega, pre_vent precio
➔ FROM proveedor, productos
➔ WHERE cod_provee = cod_proveefk
➔ GROUP BY nom_empresa, fecha_ent
➔ ORDER BY nom_empresa;
Practica 5: Genera un reporte que contenga el nombre del trabajador y cuantas ventas hizo.
➔ La información se encuentra en la tabla trabajador y ventas
La sentencia queda de la siguiente manera:
➔ SELECT trabajador.nom_emple AS nombre_empleado,
COUNT(ventas.cod_empleadofk) AS ventas_realizadas
➔ FROM trabajador, ventas
➔ WHERE trabajador.cod_empleado = ventas.cod_empleadofk
➔ GROUP BY trabajador.nom_emple;

Practica 6: genera un reporte del producto mas vendido(numero de ventas)


➔ La información se obtiene de la tabla productos y ventas

Practica 7: de la practica anterior dime cuantas “barras”. Se vendió(total)

Practica 8: genera un reporte de cuanto dinero se vendió en barras.


La sentencia queda de la siguiente forma:
➔ SELECT productos. nom_produc Se le agrega una condición mas
donde me diga suma me las
producto, SUM(ventas.total_vent) ingreso_total ventas del producto con el
FROM ventas, productos identificador igual a 1021

WHERE productos.cod_produc = ventas.cod_producfk AND


productos.cod_produc = 1021
GROUP BY productos.nom_produc;

Practica 9: genera un reporte que contenga el nombre del producto y cuanto es lo que
queda después de la ventas.

SELECT productos.nom_produc producto, (productos.cant_ini -SUM(ventas.cant_produc))


cantidad_restante FROM productos , ventas WHERE productos.cod_produc =
ventas.cod_producfk GROUP BY productos.nom_produc;3333

¿Por qué barras 0? Es producto de venta


rápida. Es decir no se almacena por un
tiempo muy largo, esto puede servir
para saber cuantas barras se deben pedir
eee y no quede en existencia.
UPDATE
Practica 1: Actualizar el dato número de teléfono del distribuidor. Ya que cambio de numero
➔ Sentencia:
UPDATE proveedor
SET telefono_P = 9993243948
WHERE cod_provee = 101;
Practica 2: Actualizar datos de un trabajador que reemplazara a otro. Porque renuncio
➔ Sentencia:
UPDATE trabajador
SET nom_emple = 'Jose Ortiz', telefono = '9993456201', correo_e = 'joseo45@gmail.com'
WHERE cod_empleado = 12;
Practica 3: Actualizar el empleado que realizo la venta con el codigo de venta '24040905',
hubo un error en la insercion
➔ Sentencia:
UPDATE ventas
SET cod_empleadofk = '12'
WHERE cod_venta = 24040905;
Practica 4: Por cuestiones de que sube algunos precios de los productos. Te piden
actualizar el valor de los productos del proveedor “tienda el ángel 2” . súbele 3 pesos.
➔ Tablas relacionadas: productos y proveedor
Sentencia:
➔ UPDATE productos
INNER JOIN proveedor
ON productos.cod_proveefk = proveedor.cod_provee
SET productos.pre_vent = productos.pre_vent + 3
WHERE proveedor.nom_empresa = 'tienda el angel 2';

La actualización fue exitosa

Practica 5: eleva 1 peso al precio de los productos en excepcion al del proveedor “tienda el
angel dos.
➔ Tablas relacionadas: proveedor y productos
UPDATE productos
➔ UPDATE productos
INNER JOIN proveedor
ON productos.cod_proveefk = proveedor.cod_provee
SET productos.pre_vent = productos.pre_vent + 1
WHERE proveedor.nom_empresa != 'tienda el angel dos';

Antes de la actualización

Después de ejecutar la sentencia


INSERT
Sintaxis:
INSERT INTO proveedor(cod_provee, nom_empresa, nom_distribuidor, telefono_p,
correo_p) VALUES (valor1, valor2, valor3, valor4, valor5)
Practica 1: te piden dar de alta a nuevos proveedores.
➔ Sentencia

INSERT INTO proveedor(cod_provee, nom_empresa, nom_distribuidor, telefono_p,


correo_p) VALUES
(115, "Sabritas", "Gabriel", "9992412289", "gab09@gmail.com"),
(116, "Papabritas", "Maria", "9999223343", "Ma2martha@gmail.com"),
(117, "Delicas", "Omar", "9993334455", "olas23Omar@gmail.com"),
(118, "La marguita", "Alfonso", "9994445566", "alfonsoPerez@gmail.com"),
(119, "AguasDoñaMari", "Martha", "9995556677", "aguasmari@gmail.com"),
(120, "Marilu", "Maricela", "9996667788", "mariamarilu@gmail.com"),
(121, "SalsasCostal", "Gabriela", "9997778899", "GabrielaSanchez@gmail.com"),
(122, "GalletasEmi", "Alondra Monforte", "9998889900", "alondra13mon@gmail.com"),
(123, "ElAlivio", "Carlos Mandarino", "9999990011", "mandarino@gmail.com"),
(124, "CastaGalletas", "Jorge", "9990001122", "jorgeventura@gmail.com");

La inserción de los proveedores fue exitosa


Practica 2: con la llegada de nuevos proveedores nuevos productos llegan , te piden que les
des da alta en la base de datos.
Sintaxis:
➔ INSERT INTO productos(cod_produc, nom_produc, pre_comp, pre_vent,
fecha_ent, cant_ini, cod_proveefk)VALUES (valor1, valor2, valor3, valor4, valor5,
valor6, valor7)

INSERT INTO productos(cod_produc, nom_produc, pre_comp, pre_vent,


fecha_ent, cant_ini, cod_proveefk) VALUES
(1024, "Pastizetas", 19.99, 20, "2024-04-05", 30, 118),
(1025, "Jugo de naranja", 24.99, 27, "2024-04-02", 20, 119),
(1026, "Pringless", 34.99, 35, "2024-05-03", 20, 116),
(1027, "Platanitos", 22.99, 23, "2024-05-04", 15, 116),
(1028, "Salsa Verde", 23.99, 26, "2024-04-28", 40, 121),
(1029, "Galleta de mantequilla", 25.00, 25, "2024-05-04", 35, 122),
(1030, "Pan de naranja", 30.00, 32, "2024-05-03", 15, 122),
(1031, "Mantequilla", 27.99, 28, "2024-04-25", 22, 118),
(1032, "Jugo de uva", 24.99, 27, "2024-04-02", 20, 119);
(1033, "Pastelito de camote", 10.00, 10, "2024-05-04", 20, 122);

La inserción fue exitosa se


dieron de alta 9 nuevos
productos
DELETE
Sintaxis
DELETE FROM nombreTabla WHERE condiciones;
Practica 1: elimina los registros cuyo identificador sea 1002, 1004, 1006
➔ La información se encuentra en la tabla productos
Sentencia:
➔ DELETE FROM productos WHERE cod_produc IN (1002, 1004, 1006);

Se eliminaron los productos: avena Rivero, aceite 123, la lechera Nestlé.


Practica 2: Elimina los registros de la cuyo nombre es “ coca – cola”
->DELETE FROM proveedor WHERE nom_empre
Practica 3: Elimíname todos los registros de la tabla trabajador
➔ Sentencia
DELETE FROM trabajador; Por cuestiones de practicidad, no
ejecutaremos este comando.
Descripción: esto borrara todos los
registros.( no hacerlo, sino tienes
respaldo)
Creacion de vistas usando varias tablas

Creación de vistas usando las tablas


➔ Provedor, ventas, productos: vista pvp
Descripción: la vista nos da el nombre de la empresa, nombre del producto, la fecha de
venta , siempre y cuando el codigo de empleado sea diferente a 11.
➔ Create view vista_pvp as select nom_empresa empresa, nom_produc producto
,fech_vent from proveedor , ventas, productos where (cod_provee =
cod_codproveefk and
Cod_produc = cod_producfk) and cod_empleadofk<>11;

Vista 2
➔ Proveedor, ventas, productos: vista ventas_provee
Descripción: esta vista nos muestra cuanto ha vendido cada proveedor(cantidad)
➔ sentencia

create view ventas_provee as select sum(precio_produc) ventas,


nom_empresa Empresa from proveedor, ventas, productos where
cod_provee=cod_proveefk and cod_produc=cod_producfk group by
Empresa order by ventas desc;
Vista 3
➔ Trabajador, ventas, producto : vista nombre_produc
Descripción: Lo que hace es dar el nombre del producto vendido y el nombre del empleado
que lo vendió. Al igual que su cantidad
➔ Sentencia

create view nombre_produc as select nom_produc Producto,


cant_produc Cantidad,nom_emple Empleado from trabajador,
productos, ventas where (cod_empleado=cod_empleadofk and
cod_produc=cod_producfk )order by cantidad asc;
Creación de Usuarios y permisos

Primero crearemos dos usuarios donde uno tendrá todos los permisos y otro solo tendrá
permisos de visualización

Usuario con todos los permisos


Primer usuario se llamara AdministradorBD con contraseña ‘admin123’

acá mostramos como fue creado y que ya aparece en la tabla de usuarios de mysql
Ahora procedemos a darle permisos.
para eso con la sentencia (Grant) podremos asignarlos: a este usuario le asignaremos todos lo
permisos para eso utilizaremos la siguiente sentencia:
Grant All Privileges on tienda_abarrotesor.* to 'AdministradorBD' with Grant option;
esto nos permite que el usuario tenga todos los permisos en la base de datos asignada.
Usuario solo consultas
Ahora pasaremos con el segundo usuario que a él solo le asignaremos permisos de vista.
Este usuario se llamara ‘consultor’ y tendra la contraseña de ‘vista123’

el usuario fue creado


ahora le daremos los permisos solo de consulta para todas las tablas.
esta hecho

como podemos ver , hace las consultas

y no permite borrar ya que no tiene ese permiso


Administración de la base de datos
tienda_abarrotesor
→ Creación de usuarios: se creará los usuarios, con permisos asignados.
→ Copia de seguridad y recuperación: se creará una copia de la base de datos
para poder hacer recuperaciones

Creación de usuarios
Usuarios con todos los privilegios
1. Creación de un usuario con todos los privilegios. En este caso. La nombramos
‘dueña’, que será quien tendrá todos los privilegios para la manipulación de la
base de datos.

2. Verificamos que el usuario se haya creado correctamente e ingresamos a la


base de datos con el usuario que acabamos de crear.
3. Le damos un show databases y un show tables. Poder observar que tenemos la
base de datos completa.

Creacion de usuario con privilegios de: Lectura y actualización de las


tablas productos y proveedor
1. Se creo un usuario ‘empleado’ que podrá ver la información y actualización de
solo dos tablas. Va a administrar solo estas.
2. Verificamos que el usuario se haya creado correctamente e ingresamos a la
base de datos con el usuario que acabamos de crear.

Como podemos observar solo tenemos permisos para esas dos tablas.

Script usuarios

DROP USER 'dueña '@'localhost';

create user 'dueña'@'localhost' identified by '123';

select user from mysql.user;

GRANT ALL PRIVILEGES ON tienda_abarrotesor.* TO 'dueña'@'localhost';

FLUSH PRIVILEGES;

Select * from productos;

Select * from ventas;

Select * from proveedor;

Select * from Trabajador;


DROP USER 'empleado'@'localhost';

CREATE USER 'empleado'@'localhost' IDENTIFIED BY '321';

SELECT user FROM mysql.user;

GRANT SELECT, UPDATE ON tienda_abarrotesor.productos TO 'empleado'@'localhost';

GRANT SELECT, UPDATE ON tienda_abarrotesor.Proveedor TO 'empleado'@'localhost';

FLUSH PRIVILEGES;

Select * from productos;

Select * from proveedor;

Creación de una copia de seguridad y recuperación

Creación de la copia de seguridad


A) La base de datos que vamos a respaldar es la siguiente:

1.Entramos al disco local C:


2. Buscamos la ruta raíz bin y copiamos la dirección

3. Pegamos la dirección y le damos enter

4. Una vez ingresado al directorio raíz, ejecutar el siguiente comando:

-> mysqldump –u root –p tienda_abarrotesor> ruta de respaldo + nombre_respaldo

-> mysqldump –u root –p tienda_abarrotesor>


C:\backup_mysql\resp_tienda_abarrotesor.sql
Como podemos observar se creo el respaldo

Restablecimiento de la base de datos en caso de ser eliminada


1. Ejecutamos los siguientes comandos:
-> mysql -u root -p -e "create database tienda_abarrotesor"(creamos la bd
tienda_abarrotesor)
mysql -u root -p tienda_abarrotesor <
C:\backup_mysql\resp_tienda_abarrotesor.sql (la restauramos con la copia)

2. Verificamos que la base de dato se haya recuperado


Script Copia de seguridad
cd..

cd..

cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"

mysqldump –u root –p tienda_abarrotesor>


C:\backup_mysql\resp_tienda_abarrotesor.sql

Script Reatauracion
mysql -u root -p -e "create database tienda_abarrotesor"

mysql -u root -p tienda_abarrotesor < C:\backup_mysql\resp_tienda_abarrotesor.sql

SQL procedural: a la base de datos


tienda_abarrotesor
→ Creación de Triggers(disparadores)
→ Procedimientos almacenados

Creación de triggers
1. Para ello crearemos una tabla reg_productos. Esta nos servirá para almacenar
la información de la tabla productos.

-> CREATE TABLE Reg_productos (

cod_produc INT(4) NOT NULL PRIMARY KEY,

nom_produc VARCHAR(30) NOT NULL,

pre_comp DECIMAL(7,2) NOT NULL,

pre_vent INT(2) NOT NULL,

fecha_ent DATE NOT NULL,

cod_proveefk INT(3) NOT NULL,

Usuario VARCHAR(20) NOT NULL,

Fecha_Registro DATETIME);
2. Creamos el trigger y le damos un show.

-> CREATE TRIGGER productos_ai

AFTER INSERT ON productos

FOR EACH ROW

INSERT INTO Reg_productos (cod_produc, nom_produc, pre_comp, pre_vent,


fecha_ent,cod_proveefk,Usuario, Fecha_Registro)

VALUES (NEW.cod_produc, NEW.nom_produc, NEW.pre_comp, NEW.pre_vent,


NEW.fecha_ent,NEW.cod_proveefk, CURRENT_USER(), now());

Se creo el trigger correctamente.


3.Insertamos nuevos registros a la tabla productos.

INSERT INTO productos (cod_produc, nom_produc, pre_comp, pre_vent, fecha_ent,


cant_ini, cod_proveefk)

-> VALUES

-> (1037, ' Media Crema Lala', 15.50, 17, '2025-05-20', 45, 112),

-> (1038, ' Gelatina Pronto', 13.50, 16, '2025-05-10', 20, 113),

-> (1040, 'Mantequilla Lisa', 17.99, 22, '2024-04-04', 30, 113),

-> (1041, 'Carnation', 22.00, 24, '2024-05-03', 20, 113),

-> (1042, 'Frijol Puritano 500g', 18.99, 20, '2024-04-25', 32, 113),

-> (1043, 'Frijol Isadora', 16.49, 19, '2024-05-08', 20, 113),

-> (1044, 'Gel Xtreme', 27.49, 30, '2024-03-18', 30, 113),

-> (1045, 'Gel Ego', 22.99, 25, '2024-04-22', 30, 113),

-> (1046, 'Baygon asa y jardin', 63.79, 67, '2024-03-26', 20, 113),

-> (1047, 'Fabuloso 1Litro', 31.99, 34, '2024-04-19', 30, 113),

-> (1048, 'Jabon zote', 12.00, 14, '2024-04-28', 30, 113),

-> (1049, 'Cloralex 950ml', 16.49, 18, '2024-05-07', 30, 113),

-> (1050, 'Elote 400g', 17.99, 20, '2024-04-14', 20, 113),

-> (1051, 'salsa botanera 1L', 26.99, 29, '2024-04-19', 20, 113),

-> (1052, 'Fideos', 11.00, 13, '2024-04-05', 40, 113),

-> (1053, 'Horchata sobre', 14.79, 17, '2024-04-23', 30, 113),

-> (1054, 'Elotes Herdez', 17.73, 20, '2024-04-28', 30, 113);


4.Le damos un select a la tabla Reg_productos

Trigger Tabla ventas


1. Creamos la tabla reg_ventas

CREATE TABLE Reg_ventas (cod_venta INT(8) NOT NULL PRIMARY


KEY,
fech_vent DATE NOT NULL,
precio_produc INT(3) NOT NULL,
cant_produc INT(2) NOT NULL,
total_vent INT(4) NOT NULL,
cod_empleadofk INT(2) NOT NULL,
cod_producfk INT(4) NOT NULL,
Usuario VARCHAR(20) NOT NULL,
Fecha_Registro DATETIME);
2. Creamos el trigger ventas_ai

3. Insertamos ventas

INSERT INTO ventas (cod_venta, fech_vent, precio_produc, cant_produc,


total_vent, cod_empleadofk, cod_producfk)

VALUES (24050944, '2024-05-25', 12, 2, 24, 12, 1012);

4. Verificamos
Creacion de procedimientos almacenados

-> tablas productos-ventas.

->tablas proveedor-productos.

1. Creacion de un procedimiento almacenado para obtener una lista de productos


junto con el ingreso total generado por las ventas de cada producto.

-> Create procedure ventas_totales_productos()


SELECT productos. nom_produc
producto, SUM(ventas.total_vent) ingreso_total
FROM ventas, productos
WHERE productos.cod_produc = ventas.cod_producfk
GROUP BY productos.nom_produc;

2. Vemos que se haya creado


-> show procedure status like 'ventas_totales_productos';
3. Llamamos al procedimiento almacenado

-> CALL ventas_totales_productos;

¡Funciono correctamente!

2.Creacion de un procedimiento almacenado para obtener un reporte con el proveedor,


nombre del producto, la fecha de entrega y el precio al que se vendió a la tienda.

-> Create procedure Proveedor_productos()

SELECT nom_empresa proveedor, nom_produc producto,fecha_ent

fecha_de_entrega, pre_vent precio


FROM proveedor, productos

WHERE cod_provee = cod_proveefk

GROUP BY nom_empresa, fecha_ent

ORDER BY nom_empresa;

b) observamos que se haya creado correctamente

-> show procedure status like 'proveedor_productos';

c) Lo llamamos para ver si devuelve lo correspondido.


-> nos devuelve exitosamente lo que se pide. Es útil para saber cuándo me llego el
producto, quien me lo dio y a cuanto me lo vendió. Y así poder tomar la decisión de en
cuanto se venderá al público.

También podría gustarte