Data">
Nothing Special   »   [go: up one dir, main page]

Super Mercado

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS.

RETO1

1. Create the Relational Model (RM)

empleados (IDemp, nombre, direccion, salario, tipo, IDseccion, jefe)

telefonos (IDemp, telefono_no)

secciones (IDseccion, nombre, ventas, numero_traba, IDemp)

compras (IDcompra, fecha, total, online, tipo_pago, IDemp, IDcliente)

clientes (IDcliente, nombre, codigo_postal, VIP)

descuentos (IDcompra, numero, descripcion, porcentaje)

productos (IDproducto, nombre, stock, precio)

contiene(IDcompra, IDproducto, cantidad)

cajeros (IDemp, turno)

reponen (IDemp, IDproducto)

cajeros (IDemp, ventas)

2. Modelo físico

create database supermercado;

use supermercado;

create table empleados(


IDemp int(5),
nombre varchar(30),
IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS. RETO1

direccion varchar(35),
salario float(6),
tipo varchar(20),
IDseccion int(5),
jefe int(5),
primary key (IDemp)
);

create table telefonos(


IDemp int(5),
telefono_no int(15),
primary key (IDemp, telefono_no)
);

create table secciones(


IDseccion int(5),
nombre varchar(30),
ventas int(10),
numero_traba int(3),
IDemp int(5),
primary key (IDseccion)
);

create table compras(


IDcompra int(5),
fecha date,
total float,
online boolean,
tipo_pago varchar(20),
IDemp int(5),
IDcliente int(5),
primary key (IDcompra)
);

create table clientes(


IDcliente int(5),
nombre varchar(30),
codigo_postal int(5),
VIP boolean,
primary key (IDcliente)
);

create table descuentos(


IDcompra int(5),
numero int(5),
descripcion varchar(50),
porcentaje int(2),
primary key (IDcompra, numero)
);
IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS. RETO1

create table productos(


IDproducto int(5),
nombre varchar(30),
stock int(5),
precio float,
primary key (IDproducto)
);

create table contiene(


IDcompra int(5),
IDproducto int(5),
cantidad int(5),
primary key (IDcompra, IDproducto)
);

create table reponedores(


IDemp int(5),
turno varchar(20),
primary key (IDemp)
);

create table reponen(


IDemp int(5),
IDproducto int(5),
primary key (IDemp, IDproducto)
);

create table cajeros(


IDemp int(5),
ventas int(10),
primary key (IDemp)
);

3. Inserción datos

use supermercado;

insert into empleados values (00000, 'Ander Garcia Pillado', 'C/ Azkuene', 1000, 'reponedores', 10016,
00002);
insert into empleados values (00001, 'Javier Pinto Dominguez', 'C/ Zumea', 1250, 'reponedores', 10016,
00002);
insert into empleados values (00002, 'Eneko Echeburu Campa', 'Santiago', 15000, 'cajeros', 10010, NULL);
insert into empleados values (00003, 'Sergio Elicegui Bande', 'C/ Locuras', 1000, 'reponedores', 10021,
00015);
insert into empleados values (00004, 'Carlos Roma Hernandez', 'C/ Lapurbide', 1250, 'cajeros', 10016,
00002);
Integridad referencial
IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS. RETO1

use Supermercado;

alter table empleados


add foreign key (IDseccion) references secciones(IDseccion)
on delete restrict on update cascade,
add foreign key (jefe) references empleados(IDemp)
on delete restrict on update cascade;

alter table telefonos


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

alter table secciones


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

alter table compras


add foreign key (IDemp) references cajeros(IDemp)
on delete restrict on update cascade,
add foreign key (IDcliente) references clientes(IDcliente)
on delete restrict on update cascade;

alter table descuentos


add foreign key (IDcompra) references compras(IDcompra)
on delete restrict on update cascade;

alter table contiene


add foreign key (IDcompra) references compras(IDcompra)
on delete restrict on update cascade,
add foreign key (IDproducto) references productos(IDproducto)
on delete restrict on update cascade;

alter table reponedores


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

alter table reponen


add foreign key (IDemp) references reponedores(IDemp)
on delete restrict on update cascade,
add foreign key (IDproducto) references productos(IDproducto)
on delete restrict on update cascade;

alter table cajeros


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

4. Creación y ejecución consultas (MIREN)


IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS. RETO1

1. Mostrar el nombre de los empleados , su salario y el salario incrementado en 2%, de aquellos empleados
que trabajan en la sección de Pescadería

select empleados.nombre,salario , salario*1.02 'Salario incrementado'


from empleados inner join secciones on empleados.idseccion=secciones.idseccion
where secciones.nombre='Pescadería';

2. Mostar nombre y fecha de los clientes VIP que han realizado compras en online durante el mes de enero.

select nombre,fecha
from compras inner join clientes on compras.idcliente=clientes.idcliente
where VIP=1 and and month(fecha)=1;

3. Mostar el nombre de los clientes que han comprado algún producto que empiece por D. Mediante
SUBCONSULTAS

select nombre
from clientes
where idcliente IN (select idcliente
from compras
where idcompra In (select idcompra
from contiene
where idproducto In (select idproducto
from productos
where nombre like 'D%')));

4. Un compañero de trabajo ha encontrado descuentos de clientes pendientes de aplicar. Los quiere aplicar
ahora. Ejecuta las siguientes operaciones :

create table desc_pendientes like descuentos;

insert into desc_pendientes values (70111, 80001, 'Oferta Black Friday', 15);
insert into desc_pendientes values (70100, 80002, 'Promoción especial navidad', 20);
insert into desc_pendientes values (70104, 80003, 'Promoción especial electrónica', 20);
insert into desc_pendientes values (70103, 80004, 'Oferta Black Friday', 10);
insert into desc_pendientes values (70109, 80005, 'Oferta Black Friday', 10);
insert into desc_pendientes values (70110, 80006, 'Promoción especial navidad', 15);

y realiza la operación que falta para pasar los descuentos de esta tabla desc_pendientes a la tabla descuentos.

insert into descuentos select * from desc_pendientes;


IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS. RETO1

5. Al querer realizar la siguiente operación en la base de datos, se han dado cuenta que falta el atributo plus en
los cajeros. Añade este atributo de tipo integer y a continuación realiza la operación siguiente:

alter table cajeros


add plus int;

A los cajeros que pertenecen a las secciones 10006 y 10005 el plus será 100 y al resto de los cajeros 50.

update cajeros
set plus=100
where idemp In (select idemp
from empleados
where idseccion In(10006,10005));

update cajeros
set plus=50
where idemp In (select idemp
from empleados
where idseccion NOT IN (10006,10005));

6. Se quiere mostrar la suma total gastada en las compras realizada por el cliente cuyo nombre es Sergio pero
su apellido no se sabe.

select idcliente,sum(total)
from compras i
where idcliente IN (select idcliente
from clientes
where nombre like 'Sergio%');

7. Se está haciendo un estudio y se quiere saber cuántas veces ha sido comprado el producto Galletas Oreo.

select count(idproducto)
from contiene
where idproducto = (select idproducto
from productos
where nombre ='Galletas Oreo');

8. Mostrar una relación de los productos comprados en cada compra. Se mostrará el idcompra, idproducto,
nombre, precio, cantidad, precio total.

select idcompra, productos.idproducto, nombre, precio, cantidad, precio*cantidad


from productos inner join contiene on productos.idproducto=contiene.idproducto;
IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS. RETO1

9. Se necesita un listado con el idcliente y nombre del cliente, de aquellos clientes que han realizado alguna
compra que no tienen descuento.

select distinct clientes.idcliente, nombre


from compras inner join clientes on compras.idcliente=clientes.idcliente
where idcompra not in (select idcompra
from descuentos);

10. Ha habido un error y los teléfonos del empleado Javier Pinto Dominguez son incorrectos. Se quiere
eliminarlos para poder introducir los teléfonos correctos.

delete from telefonos


where idemp = (select idemp
from empleados
where nombre ='Javier Pinto Dominguez');

11. Se quiere saber el número de trabajadores que trabaja en cada sección.

Select count(*) 'Cantidad empleados', s.nombre 'Nombre Seccion'


From empleados e inner join secciones s on e.IDseccion = s.IDseccion
Group by s.idseccion;

12. Se trata de conocer la media de los salarios de los trabajadores que trabaja en cada una de las secciones que
comienzan con P '.

select avg(e.salario)'Salario medio' , s.nombre 'Nombre Seccion'


From empleados e inner join secciones s on e.IDseccion = s.IDseccion
where s.nombre like 'P%'
Group by s.idseccion;

13. Se trata de conocer la media de los salarios de los trabajadores que trabajan en cada una de las secciones
que comienzan con P 'y ganan más de 1000 €.

select avg(e.salario)'Salario medio' , s.nombre 'Nombre Seccion'


From empleados e inner join secciones s on e.IDseccion = s.IDseccion
where s.nombre like 'P%'and s.ventas>1000
Group by s.idseccion;

14. Se trata de conocer la media de los salarios de los trabajadores que trabajan en cada una de las secciones
que comienzan con P 'y ganan más de 1000 €. Sólo aparecerán secciones medias de salarios superiores a
1100.
select avg(e.salario)'Salario medio' , s.nombre 'Nombre Seccion'
From empleados e inner join secciones s on e.IDseccion = s.IDseccion
where s.nombre like 'P%'and s.ventas>1000
Group by s.idseccion
having avg(e.salario)>1100;
IMPLEMENTACION Y DISEÑO DE UNA BASE DE DATOS. RETO1

También podría gustarte