Download - Informe Comidas

Transcript

Introducción

El siguiente informe muestra el proceso llevado a cabo para elaborar una base de datos de un negocio dedicado a la venta de comida rápida. Éste incluye tanto el modelo conceptual, como físico de la base de datos para dicho negocio.

El propósito del diseño de la base de datos para dicho negocio se orienta en satisfacer la necesidad de información y en el almacenamiento de datos relevantes para el negocio. El modelo conceptual utilizado para el diseño de la base de datos es el modelo entidad relación extendido. En este informe se describen las entidades, los tipos de relaciones así como también se presentan los script de creación de la base de datos completa. Dicho trabajo se ha realizado utilizando MySql como gestor de bases de datos y ASP .Net como plataforma de desarrollo para realizar la aplicación de dicho sistema.

Objetivos Sistema ‘Eat’nGo’

General

1. Almacenar, gestionar y presentar la información de los procesos de venta, reparto e inventariado del establecimiento Eat’nGo.

Específicos

1. Mantener el inventario de productos, ingredientes, artículos de venta y equipo de reparto de la empresa.

2. Realizar ventas que realiza la empresa y mantener el historial de las mismas.

3. Determinar las promociones que se ofrecerán a los clientes de la empresa.

4. Llevar el control de los repartos realizados a los clientes, incluyendo el repartidor asignado, el equipo de reparto a usar y mantener la información del coste de los mismos.

5. Almacenar la información de los clientes por razones de marketing o para ofrecer promociones a dichos clientes.

Enunciado del problema

Eat’nGo, una empresa internacional dedicada a la comercialización de comidas rápidas, tiene la intención de ubicar una franquicia en nuestra localidad, siéndole necesario informatizar la gestión del negocio adaptándolo a las características propias de la clientela esperada. Esta empresa se dedica a la venta de pizzas y bocadillos, además de productos complementarios como refrescos, helados, etc.

Supuestos del problema

SUPUESTO 1: Tanto las pizzas como los bocadillos pueden condimentarse con un número de ingredientes de entre un conjunto de ellos con los que trabaja la empresa.

SUPUESTO 2: Los ingredientes con los que se hacen los bocadillos pueden ser iguales o distintos a aquellos con los que se hacen las pizzas.

SUPUESTO 3: El número de ingredientes que intervienen en un artículo que se vende (pizza o bocadillo) no está delimitado, pudiendo realizarse una venta de estos artículos sin ningún ingrediente. Es decir, la empresa vende también las bases de las pizzas y el pan con los que prepara las pizzas y los bocadillos, respectivamente.

SUPUESTO 4: Cada artículo que vende la empresa (pizzas, bocadillos y productos complementarios) tiene un precio base asignado (el precio de estos productos cuando se venden de forma independiente), sin contar los ingredientes que pueden acompañar a alguno de estos tipos de artículos.

SUPUESTO 5: Cada ingrediente tiene un precio para los bocadillos, mientras que para las pizzas todos los ingredientes tienen el mismo precio (los productos complementarios no llevan ingredientes).

SUPUESTO 6: Los artículos se pueden vender en distinto tamaño, en cuyo caso el precio base es distinto según el tamaño, y el precio de los ingredientes también. Existen, actualmente, tres tamaños en los que se venden los bocadillos y las pizzas (pequeño, normal y grande).

SUPUESTO 7: Las ventas se pueden hacer de tres formas diferentes: para consumir en el local, para recoger en el local y llevar o consumir en el mismo, y para servir a domicilio, en cuyo caso puede incrementarse un cargo añadido por el porte de la venta.

SUPUESTO 8: Los artículos complementarios que vende la empresa tienen un precio fijo en base a su tipo, tamaño, sabor, etc.

SUPUESTO 9: Los clientes pueden solicitar un servicio de la empresa (un pedido) tanto personalmente en el local como telefónicamente.

SUPUESTO 10: En los pedidos telefónicos se tomaran los datos completos del cliente: en los de recoger solo el documento nacional de identidad y su nombre completo, y en los de consumir en el local no se tomara ningún dato, a no ser que sea necesario por otras razones.

SUPUESTO 11: A la empresa le interesa mantener información de todos los clientes a los que se les recoge información por dos razones:

Simplemente a escala informativa, de consumo y marketing.

Para llevar el control del consumo y favorecer, mediante obsequios, a aquellos clientes que alcancen un cierto consumo.

SUPUESTO 12: La empresa organiza, a veces, promociones para sus clientes. Estas se basan en el obsequio de algún regalo o artículo de propaganda sobre la base de:

Las unidades consumidas de alguno de los tipos de artículos: pizzas o bocadillos.

Cargo total alcanzado en los pedidos.

SUPUESTO 12+1: Cuando la empresa obsequia a los clientes con algún artículo de promoción siempre recaba de los mismos toda su información y, además, mantiene información sobre los regalos de promoción que se les entrega para, a ser posible, no hacer entregas duplicadas de los mismos.

SUPUESTO 14: La empresa cuenta con una serie de repartidores encargados del reparto a domicilio y de una batería de scooters para ayudarles en su cometido. Cada reparto se le asigna a un repartidor, el cual tiene asignado un scooter, aunque un mismo scooter puede ser utilizado por distintos repartidores (por supuesto en distintos turnos de trabajo).

SUPUESTO 15: A la empresa le interesa conocer información del coste de los scooters sobre la base del consumo de gasolina de los mismos en la realización de los repartos.

SUPUESTO 16: Los precios de todos los artículos que vende la empresa tienen el IVA incluido.

SUPUESTO 17: En los pedidos a domicilio existe un mínimo, en lo referente al valor del pedido, para que este sea servido. Si el valor de los artículos que componen el pedido no alcanza este mínimo y el cliente desea que se le sirva a domicilio, se le cobrara ese mínimo.

SUPUESTO 18: La empresa cuenta con una serie de pizzas y bocadillos "estrellas", los cuales están formados por un conjunto de ingredientes predeterminados. Estos artículos tienen un nombre comercial único y su precio es el que resulta del acumulado de los ingredientes que incorporan.

Esquema Conceptual

Entidades

Articulos_VentaProducto_FabricadoPizzaBocadilloProducto_ComplementarioTamañoIngredientePedidoPedido_A_DomicilioPedido_En_LocalPersonaClienteCliente_A_DomicilioCliente_En_LocalPromociónRegalo_PromocionRepartidorRepartoScooterArticulo_Estrella

Descripción de entidades

Entidad Descripción AtributosArticulos_Venta Artículos que ofrece la empresa para su venta, estos

pueden ser fabricados en la empresa o complementos.

Id,existencias

Producto_Fabricado Producto fabricados en la empresa para su venta, pueden ser pizzas o bocadillos.

Pizza Producto fabricado por la empresa para su venta.Bocadillo Producto fabricado por la empresa para su venta.Producto_Complementario

Productos adquiridos por la empresa para su venta, estos pueden ser refrescos, helados, entre otros.

Precio,tipo,tamaño,sabor

Tamaño Es una característica de un producto fabricado por la empresa.

Tamaño

Ingrediente Producto utilizado para condimentar las pizzas o bocadillos.

Id,nombre,existencias

Ingrediente_Bocadillo

Ingrediente que se agrega a los bocadillos.

Pedido Encargo hecho a la empresa que puede realizarse a domicilio o en el local.

Id,fecha

Pedido_A_Domicilio Encargo realizado por un cliente por vía telefónica. Cargo_porte,minimo_pedidoPedido_En_Local Encargo realizado por un cliente en el local de la

empresa.Persona Entidad que puede ser un cliente o un empleado

(repartidor) de la empresa.Dni,nombres,apellidos

Cliente Persona que realiza pedidos a la empresa.Cliente_A_Domicilio Persona que realiza pedidos por vía telefónica. Colonia_vivienda,num_casa,t

elefonoCliente_En_Local Persona que realiza pedidos para llevar en el local de

la empresa.Promoción Evento que realiza la empresa para premiar el

consumo de algunos clientes o para aumentar las ventas de la empresa.

Id,nombre

Regalo_Promocion Objeto que se da a un cliente debido a una promoción.

Id,nombre,entregado

Repartidor Persona que realiza los repartos de los pedidos a domicilio.

Scooter Equipo de reparto utilizado por los empleados para llevar a cabo esta labor.

Id,consumo_por_metro

Articulo_Estrella Articulo especial en venta con características definidas.

nombre

Descripción de Relaciones:

Relación Descripción

Relación de especialización exclusiva de un artículo en venta que puede ser un producto fabricado por la empresa o un producto complementario.

Relación de especialización exclusiva de los productos que fabrica la empresa que pueden ser pizzas o bocadillos.

Relación de muchos a muchos entre las pizzas y los ingredientes.

Relación de especialización de un ingrediente que puede ser un ingrediente de bocadillo.

Relación muchos a uno que indica que una pizza puede tener diferentes tamaños. Incluyendo el precio base de la pizza dependiendo del tamaño y el precio por cada ingrediente.

Relación muchos a uno que indica que un bocadillo puede ser de diferentes tamaños. Incluyendo el precio base de los bocadillos

Relación muchos a muchos que describe que un bocadillo puede tener distintos ingredientes de bocadillo y un ingrediente de bocadillo puede estar en distintos bocadillos.

Relación muchos a uno que indica que un ingrediente de bocadillos puede estar en bocadillos de distintos tamaños. Incluyendo el precio por cada ingrediente de bocadillo dependiendo del tamaño.

Relación de uno a muchos que describe que un artículo en venta puede formar parte de diferentes promociones.

Relación de especialización exclusiva que indica que un pedido puede ser a domicilio o en el local.

Relación de especialización exclusiva que indica que una persona en la empresa puede ser cliente o repartidor.

Relación de especialización exclusiva que indica que un cliente puede ser un cliente que pide a domicilio o en el local.

Relación de muchos a muchos que indica que varias promociones pueden ser adquiridas por distintos clientes.Relación muchos a uno que indica que un repartidor tiene asignado diferentes pedidos a domicilio para entregar.

Relación muchos a muchos que indica que varios clientes a domicilio pueden hacer distintos pedidos a domicilio.

Relación muchos a muchos que indica que diferentes clientes en el local pueden realizar varios pedidos en el local.

Relación de muchos a uno que indica que un regalo de promoción puede estar en diferentes promociones.

Relación de uno a muchos que indica que un scooter es asignado a distintos repartidores con turnos diferentes.

Relación de muchos a muchos que indica que muchos artículos en venta pueden formar parte de distintos pedidos.

Relación uno a uno que indica que un producto fabricado puede ser un artículo estrella.

Diagrama Entidad-Relación

Diccionario de datos

Articulos_VentaNombre Tipo Descripción

Id Nchar(10) Identificador único del artículo en venta.existencias int Cantidad en existencias del artículo en venta.

tipo Nchar(1)Indica el tipo de artículo en venta que es (F:

Producto fabricado, C: Producto complementario).

Producto_FabricadoNombre Tipo Descripción

Id Nchar(10) Identificador único del producto fabricado. Es clave foránea de la tabla Articulos_Venta.

tipo Nchar(1) Indica el tipo de producto fabricado que es (P: Pizza, B: Bocadillo).

PizzaNombre Tipo Descripción

id_articulo nchar(10) Identificador único de la pizza. Es clave foránea de la tabla Productos_Fabricados.

Tamaño nvarchar(30) Llave foránea de la tabla Tamaños que indica el tamaño de la pizza.

precio_base Decimal Precio base que tiene la pizza.precio_por_ing Decimal Precio que tendrá cada ingrediente.

BocadilloNombre Tipo Descripción

id_articulo Nchar(10) Identificador único del bocadillo. Es clave foránea de la tabla Productos_Fabricados.

tamaño nvarchar(30) Llave foránea de la tabla Tamaños que indica el tamaño del bocadillo.

precio_base decimal Precio base del bocadillo.

Producto_Complementario

Nombre Tipo Descripción

id_articulo nchar(10)Identificador único del producto

complementario. Es clave foránea de la tabla Articulos_Venta.

Precio decimal Precio del producto complementario.tipo nvarchar(50) Tipo de producto (bebida, postre, etc.)

tamaño nvarchar(30) Indica el tamaño del producto complementario.

sabor nvarchar(50) Indica el saber del producto complementario.

TamañoNombre Tipo Descripcióntamaño nvarchar(30) Identificador único del tamaño.

IngredienteNombre Tipo Descripción

id nchar(10) Identificador único del ingrediente.nombre nvarchar(50) Nombre del ingrediente.

existencias Int Cantidad en existencia del ingrediente.

Ingrediente_BocadilloNombre Tipo Descripción

id_ingrediente nchar(10)Identificador único del ingrediente de bocadillo. Es clave foránea de la tabla

Ingredientes.

tamaño nvarchar(30)Indica el tamaño del bocadillo donde se

colocará el ingrediente de bocadillo. Es clave foránea de la tabla Tamaños.

precio_ing Decimal Precio del ingrediente de bocadillo.

PedidoNombre Tipo Descripción

id nchar(10) Identificador del pedido junto con la fecha del pedido.

fecha Date Fecha de la realización del pedido.

tipo nchar(1) Indica el tipo de pedido que es (D: Domicilio, L: Local).

Pedido_A_DomicilioNombre Tipo Descripción

id_pedido nchar(10) Identificador del pedido a domicilio. Es clave foránea de la tabla Pedidos.

fecha Date Fecha del pedido. Es clave foránea de la tabla Pedidos.

cargo_porte Decimal Cargo por la entrega del pedido.minimo_del_pedido Decimal Coste mínimo que el pedido debe tener.

distancia Int Distancia en metros del local al lugar del pedido.

dni_repartidor nchar(13) Identificador del repartidor al que ha sido asignado el pedido.

Pedido_En_LocalNombre Tipo Descripción

id_pedido nchar(10) Identificador del pedido en el local. Es clave foránea de la tabla Pedidos.

fecha Date Fecha del pedido en el local. Es clave foránea de la tabla Pedidos.

PersonaNombre Tipo Descripción

dni nchar(13) Identificador único de la persona.nombres nvarchar(50) Nombres de la persona.apellidos nvarchar(50) Apellidos de la persona.

tipo nchar(1) Indica el tipo de entidad persona que es (C: Cliente, R: Repartidor).

ClienteNombre Tipo Descripción

dni_persona nchar(13) Identificador único del cliente, es clave foránea de la tabla Personas.

tipo nchar(1) Indica el tipo de cliente que es (D: Domicilio, L: Local).

Cliente_A_DomicilioNombre Tipo Descripción

dni_cliente nchar(13) Identificador único del cliente a domicilio, es clave foránea de la tabla Personas.

colonia nvarchar(50) Colonia donde vive el cliente.num_casa Int Número de la casa del cliente.telefono nvarchar(8) Número telefónico del cliente.

Cliente_En_LocalNombre Tipo Descripción

dni_cliente nchar(13) Identificador único del cliente en local, es clave foránea de la tabla Personas.

PromociónNombre Tipo Descripción

Id Nchar(10) Identificador único de la promoción.nombre Nvarchar(30) Nombre asignado a la promoción.

Regalo_PromocionNombre Tipo Descripción

Id Nchar(10) Identificador único del regalo dado en una promoción.

nombre Nvarchar(30) Nombre del regalo de promoción.existencias int Indica las existencias del regalo.

entregado bit Campo que indica si el regalo ha sido entregado o no.

RepartidorNombre Tipo Descripción

dni_persona nchar(13) Identificador único del repartidor, es clave foránea de la tabla Personas.

id_scooter nchar(10)Identificador del scooter asignado al

repartidor. Es clave foránea de la tabla Scooters.

turno nvarchar(50) Indica el turno de trabajo del repartidor.

ScooterNombre Tipo Descripción

Id Nchar(10) Identificador único del scooter.consumo_por_metr

oDecimal Consumo que tiene el scooter por metro.

Articulo_EstrellaNombre Tipo Descripción

nombre Nvarchar(30) Nombre único del artículo estrella que también es su identificador.

Modelo Relacional

Articulos_Venta (id,existencias,tipo)Tamaños (tamaño)Productos_Fabricados (id_articulo,tipo)Pizzas (id_articulo,tamaño,precio_base,precio_por_ing)Bocadillos (id_articulo,tamaño,precio_base)Productos_Complementarios (id_articulo,precio,tipo,tamaño,sabor)Ingredientes (id,nombre,existencias)Ingredientes_Bocadillo (id_ingrediente,tamaño,precio_ing)Personas (dni,nombres,apellidos,tipo)Clientes (dni_persona,tipo)Clientes_A_Domicilio (dni_cliente,colonia,num_casa,telefono)Clientes_En_Local (dni_cliente)Scooters (id,consumo_por_hora)Repartidores (dni_persona,id_scooter,turno)Pedidos (id, fecha, tipo)Pedidos_A_Domicilio (id_pedido,fecha,cargo_porte,minimo_del_pedido,distancia,dni_repartidor)Pedidos_En_Local (id_pedido,fecha)Promociones (id,nombre)Regalos_Promocion (id,nombre,entregado)Articulos_Estrella (nombre)

PF_AE (id_articulo, nombre_ae)Pizzas _Ingredientes (id_articulo,id_ingrediente)Bocadillos_IngredientesB (id_articulo,id_ingredienteB)AV_Pedidos (id_articulo,id_pedido, fecha,precio_articulo)AV_Promociones (id_articulo,id_promocion)Promociones_RegalosP (id_promocion,id_regalo)Clientes_Promociones (dni,id_promocion,fecha_promocion)PedidosD_ClientesD (id_pedido,fecha,dni_cliente)PedidosL_ClientesL (id_pedido,fecha,dni_cliente)

Diagrama Relacional

Creación de la base de datos (DDL)

--create database Eatngo;

use eatngo;

create table Articulos_Venta (

id nchar(10) not null,

existencias int,

tipo nchar(1),

constraint articulo_ventaPK primary key (id)

);

create table Tamaños (

tamaño nvarchar(30) not null,

constraint tamañoPK primary key (tamaño)

);

create table Productos_Fabricados (

id_articulo nchar(10) not null,

tipo nchar(1),

constraint producto_fabPK primary key (id_articulo),

constraint productoFab_avFK foreign key (id_articulo) references Articulos_Venta(id) on update cascade on delete cascade

);

create table Pizzas (

id_articulo nchar(10) not null,

tamaño nvarchar(30) not null,

precio_base decimal,

precio_por_ing decimal,

constraint pizzaPK primary key (id_articulo),

constraint pizza_pfFK foreign key (id_articulo) references Productos_Fabricados(id_articulo) on update cascade on delete cascade,

constraint pizza_tamFK foreign key (tamaño) references Tamaños(tamaño) on update cascade on delete cascade

);

create table Bocadillos (

id_articulo nchar(10) not null,

tamaño nvarchar(30) not null,

precio_base decimal,

constraint bocadilloPK primary key (id_articulo),

constraint bocadillo_pfFK foreign key (id_articulo) references Productos_Fabricados(id_articulo) on update cascade on delete cascade,

constraint bocadillo_tamFK foreign key (tamaño) references Tamaños(tamaño) on update cascade on delete cascade

);

create table Productos_Complementarios (

id_articulo nchar(10) not null,

precio decimal,

tipo nvarchar(30),

tamaño nvarchar(30) not null,

sabor nvarchar(50),

constraint producto_compPK primary key (id_articulo),

constraint productoComp_avFK foreign key (id_articulo) references Articulos_Venta(id) on update cascade on delete cascade

);

create table Ingredientes (

id nchar(10) not null,

nombre nvarchar(50),

existencias int,

constraint ingredientePK primary key (id)

);

create table Ingredientes_Bocadillo (

id_ingrediente nchar(10) not null,

tamaño nvarchar(30) not null,

precio_ing decimal,

constraint ingrediente_bPK primary key (id_ingrediente),

constraint ib_ingredienteFK foreign key (id_ingrediente) references Ingredientes(id) on update cascade on delete cascade,

constraint ib_tamFK foreign key (tamaño) references Tamaños(tamaño) on update cascade on delete cascade

);

create table Personas (

dni nchar(13) not null,

nombres nvarchar(50),

apellidos nvarchar(50),

tipo nchar(1),

constraint personaPK primary key (dni)

);

create table Clientes (

dni_persona nchar(13) not null,

tipo nchar(1),

constraint clientePK primary key (dni_persona),

constraint cliente_personaFK foreign key (dni_persona) references Personas(dni) on update cascade on delete cascade

);

create table Clientes_A_Domicilio (

dni_cliente nchar(13) not null,

colonia nvarchar(50),

num_casa int,

telefono nvarchar(8),

constraint cliente_dPK primary key (dni_cliente),

constraint clienteD_clienteFK foreign key (dni_cliente) references Clientes(dni_persona) on update cascade on delete cascade

);

create table Clientes_En_Local (

dni_cliente nchar(13) not null,

constraint cliente_lPK primary key (dni_cliente),

constraint clienteL_clienteFK foreign key (dni_cliente) references Clientes(dni_persona) on update cascade on delete cascade

);

create table Scooters (

id nchar(10) not null,

consumo_por_metro decimal,

constraint scooterPK primary key (id)

);

create table Repartidores (

dni_persona nchar(13) not null,

id_scooter nchar(10) not null,

turno nvarchar(50),

constraint repartidorPK primary key (dni_persona),

constraint repartidor_personaFK foreign key (dni_persona) references Personas(dni) on update cascade on delete cascade,

constraint turno_unico unique(id_scooter,turno)

);

create table Pedidos (

id nchar(10) not null,

fecha date not null,

tipo nchar(1),

constraint pedidoPK primary key (id,fecha)

);

create table Pedidos_A_Domicilio (

id_pedido nchar(10) not null,

fecha date not null,

cargo_porte decimal,

minimo_del_pedido decimal,

distancia int,

dni_repartidor nchar(13) not null,

constraint pedido_dPK primary key (id_pedido,fecha),

constraint pedidoD_pedidoFK foreign key (id_pedido,fecha) references Pedidos(id,fecha) on update cascade on delete cascade,

constraint pedidoD_repartidorFK foreign key (dni_repartidor) references Repartidores(dni_persona) on update cascade on delete cascade

);

create table Pedidos_En_Local (

id_pedido nchar(10) not null,

fecha date not null,

constraint pedido_lPK primary key (id_pedido,fecha),

constraint pedidoL_pedidoFK foreign key (id_pedido,fecha) references Pedidos(id,fecha) on update cascade on delete cascade

);

create table Promociones (

id nchar(10) not null,

nombre nvarchar(30),

constraint promocionPK primary key (id)

);

create table Regalos_Promocion (

id nchar(10) not null,

nombre nvarchar(30),

entregado bit,

existencias int,

constraint regaloPK primary key (id)

);

create table Articulos_Estrella (

nvarchar(30) not null,

constraint articulo_ePK primary key (nombre)

);

create table PF_AE (

id_articulo nchar(10) not null,

nombre_ae nvarchar(30) unique not null,

constraint pf_aePK primary key (id_articulo),

constraint pfae_pfFK foreign key (id_articulo) references Productos_Fabricados(id_articulo) on update cascade on delete cascade,

constraint pfae_aeFK foreign key (nombre_ae) references Articulos_Estrella(nombre) on update cascade on delete cascade

);

create table Pizzas_Ingredientes (

id_articulo nchar(10) not null,

id_ingrediente nchar(10) not null,

constraint pizza_ingredientePK primary key (id_articulo,id_ingrediente),

constraint pi_pizzaFK foreign key (id_articulo) references Pizzas(id_articulo) on update cascade on delete cascade,

constraint pi_ingredienteFK foreign key (id_ingrediente) references Ingredientes(id) on update cascade on delete cascade

);

create table Bocadillos_IngredientesB (

id_articulo nchar(10) not null,

id_ingredienteB nchar(10) not null,

constraint bocadillo_ingBPK primary key (id_articulo,id_ingredienteB),

constraint bi_bFK foreign key (id_articulo) references Bocadillos(id_articulo) on update cascade on delete cascade,

constraint bi_ingBFK foreign key (id_ingredienteB) references Ingredientes_Bocadillo(id_ingrediente) on update cascade on delete cascade

);

create table AV_Pedidos (

id_articulo nchar(10) not null,

id_pedido nchar(10) not null,

fecha date not null,

precio_articulo decimal,

constraint av_pedidoPK primary key (id_articulo,id_pedido,fecha),

constraint avped_avFK foreign key (id_articulo) references Articulos_Venta(id) on update cascade on delete cascade,

constraint avped_pedFK foreign key (id_pedido,fecha) references Pedidos(id,fecha) on update cascade on delete cascade

);

create table AV_Promociones (

id_articulo nchar(10) not null,

id_promocion nchar(10) not null,

constraint av_promocionPK primary key (id_articulo,id_promocion),

constraint avpro_avFK foreign key (id_articulo) references Articulos_Venta(id) on update cascade on delete cascade,

constraint avpro_proFK foreign key (id_promocion) references Promociones(id) on update cascade on delete cascade

);

create table Promociones_RegalosP (

id_promocion nchar(10) not null,

id_regalo nchar(10) not null,

constraint promocion_regaloPK primary key (id_promocion,id_regalo),

constraint pr_pFK foreign key (id_promocion) references Promociones(id) on update cascade on delete cascade,

constraint pr_rFK foreign key (id_regalo) references Regalos_Promocion(id) on update cascade on delete cascade

);

create table Clientes_Promociones (

dni_cliente nchar(13) not null,

id_promocion nchar(10) not null,

fecha_promocion date,

constraint cliente_promocionPK primary key (dni_cliente,id_promocion),

constraint cpro_proFK foreign key (id_promocion) references Promociones(id) on update cascade on delete cascade,

constraint cpro_cFK foreign key (dni_cliente) references Clientes(dni_persona) on update cascade on delete cascade

);

create table PedidosD_ClientesD (

id_pedido nchar(10) not null,

fecha date not null,

dni_cliente nchar(13) not null,

constraint pedidoD_clienteDPK primary key (id_pedido,fecha,dni_cliente),

constraint pdcd_pdFK foreign key (id_pedido,fecha) references Pedidos_A_Domicilio(id_pedido,fecha) on update cascade on delete cascade,

constraint pdcd_cdFK foreign key (dni_cliente) references Clientes_A_Domicilio(dni_cliente) on update cascade on delete cascade

);

create table PedidosL_ClientesL (

id_pedido nchar(10) not null,

fecha date not null,

dni_cliente nchar(13) not null,

constraint pedidoL_clienteLPK primary key (id_pedido,fecha,dni_cliente),

constraint plcl_plFK foreign key (id_pedido,fecha) references Pedidos_En_Local(id_pedido,fecha) on update cascade on delete cascade,

constraint plcl_clFK foreign key (dni_cliente) references Clientes_En_Local(dni_cliente) on update cascade on delete cascade

);

Manipulación de la Base de Datos

-- Consulta 1

delimiter $

create procedure consulta1()

begin

SELECT precio_base+2*precio_por_ing FROM Pizza where id_articulo =

(Select id_articulo from pizzas_ingredientes group by id_articulo having COUNT(id_articulo)=2);

END $

-- Consulta 2

delimiter $

create procedure consulta2()

begin

select id_articulo, SUM(precio_articulo) from AV_Pedidos where id_articulo not in

(select id_articulo from Pizzas) group by id_articulo;

END $

-- Consulta 3

delimiter $

create procedure consulta3()

begin

select dni, nombres, apellidos from Personas where dni in (

Select dni_persona from Clientes where dni_persona

in (

Select distinct dni_cliente from PedidosD_ClientesD group by dni_cliente

having MAX_COUNT(id_pedido)

)

);

END $

-- Consulta 4

delimiter $

create procedure consulta4()

begin

select dni, nombres, apellidos from Personas where dni in (

Select dni_persona from Repartidores where dni_persona

in (

Select distinct dni_repartidor from pedidos_a_domicilio where id_pedido='111' and fecha = '08/06/1999')

);

END $

-- Consulta 5

delimiter $

create procedure consulta5()

begin

delete from Regalos_Promocion where entregado = 0;

END $

-- Consulta 6

delimiter $

create procedure consulta6()

begin

select count(id) from Articulos_Venta where id not in (select id_articulo from Bocadillos)

and id in (select id_articulo from AV_Pedidos where fecha between '01/02/2000' and '28/02/2000');

END $