Diseño de Bases de datos Distribuidas

Tarea: Diseño de una base de datos distribuida.
Por:
Yeraldin Cardona Botero
Juan Manuel Ramírez Devia

Asignatura:
Base de datos II
Institución Universitaria Pascual Bravo
Medellín
2019



Usted o Su equipo, deben presentar una situación hipotética o real en la cual se pueda aplicar BDD y plantear un esquema de la posible solución.

Las bases de datos distribuidas son un conjunto de múltiples bases de datos lógicamente relacionadas, las cuales se encuentran distribuidas en diferentes sitios, interconectadas por una red de comunicaciones, las cuales tiene una red de procesamiento autónomo, esto indica que puede realizar operaciones locales o distribuidas, , de tal manera que un usuario puede acceder a los datos desde cualquier parte de la red.

La empresa de Restaurantes “El Buen Gusto” tiene tres sedes de restaurantes en la ciudad de Bogotá. Debido a su buen servicio y excelentes platos que ofrece, se ve en la necesidad de crear una red, para comunicar las tres sedes entre si, para lograr este propósito es necesario implementar una base de datos distribuida.
Por tal motivo se debe cumplir con los siguientes requerimientos:

SEDE CENTRO
          Se manejará el inventario general de los respectivos productos.
Se mantendrán todos los datos de los empleados.
Se tendrá los datos de los clientes de todas las sedes, lo cual servirá para hacer un seguimiento de los compradores más continuos.

SEDES NORTE Y SUR

Cada sede visualizará y manejará los siguientes datos:

  1. Cédula, nombre y dirección de cada empleado
  2. Inventario de productos existente en su sede.
  3. Registro de los clientes que compran en su sede

La base de datos contará con las siguientes tablas:

Empleado(Id_Empleado, Nombre, Cedula, Salario, Bonificación, sede, Dirección,Telefono)
Plato(Id_Plato, NombrePlato, Cantidad_Disponible, Valor)
Orden(Id_Orden,sede, Id_Cliente)
DetalleOrden(Id_Plato,cantidad,Id_Orden)
Cliente(Id_Cliente, Nombre, sede, Cedula)

Creamos en SQL Server la base de datos:

create database DB_ElBuenGusto
use DB_ElBuenGusto

create table Empleado

(Id_Empleado int  not null,
Nombre varchar (80)not null,
Cedula int not null,
Salario decimal not null,
Bonificacion decimal not null,
ciudad varchar(50),
direccion varchar(50),
telefono varchar(12),
primary key(Id_Empleado))
create table Platos

(Id_Plato int not null,
NombrePlato varchar(50) not null,
Cantidad_Disponible int not null,
Valor decimal not null,
primary key(Id_Plato))
create table Orden

(Id_Orden int  not null,
Sede varchar (50),
Id_Cliente int,
primary key(Id_Orden))
create table DetalleOrden

(CodigoProducto int not null,
Cantidad int not null,
CodigoPedido int not null,
Foreign key (CodigoProducto)references Producto(CodigoProducto)
on delete cascade on update cascade,
Foreign key (CodigoPedido)references Pedido(CodigoPedido)
on delete cascade on update cascade)
create table Cliente
(Id_Cliente int  not null,
Nombre varchar(80) not null,
Cedula int not null,
primary key (Id_Cliente))

Lo primero que vamos a fragmentar es la tabla Empleado, para lo cual vamos a efectuar primero fragmentación vertical:

Fragmentación vertical empleado
EMPLEADOCENTRO(Id_Empleado,Nombre,cedula,Salario,Bonificacion,Sede,Dirección, Teléfono )
EMPLEADO1(cedula, salario, bonificación)
select *
into EmpleadoCentro
from empleado
select cedula,NombreEmpleado,Sede
into Empleado1
from empleado



Seguido, vamos a efectuar fragmentación Horizontal para las tres sedes, la cual deriva de la fragmentación Vertical hecha anteriormente

/* Sede Norte */
Select Empleado1.*
into Empleado1Norte
from Empleado1
where Empleado1.Sede='Norte'
/*  Sede Centro */
Select Empleado1.*
into Empleado1Centro
from Empleado1
where Empleado1.Sede='Centro'
/* Sede sur */
Select Empleado1.*
into Empleado1Sur
from Empleado1
where Empleado1.Sede='Sur'
Ahora vamos a fragmentar trabajar sobre la tabla clientes. Teniendo en cuenta el enunciado indicado al empezar, la discriminación de estos datos será: Totalidad de datos Clientes de la sede Centro (sede principal), y datos los clientes locales para cada sede. Dado que no vamos a fragmentar datos de los clientes, no será necesario establecer fragmentación Vertical, pero sí Fragmentación Horizontal

Fragmentación Inicial

select *
into Cliente1
from clientes


Fragmentación Horizontal derivada de la fragmentación Inicial
/*Sede Centro */
Select Cliente1.*
into ClienteCentro
from Cliente1
where cliente1.Sede='Centro'




/*Sede Norte*/
Select Cliente1.*
into ClienteNorte
from Cliente1
where cliente1.Sede=' Norte '
/*Sede Sur */
Select Cliente1.*
into ClienteSur
from Cliente1
where cliente1.Sede='Sur'

Finalmente vamos a trabajar sobre la tabla platos. Si tomamos los datos del inventario general del Restaurante, encontramos que no existe en los atributos no existe un criterio que discrimine las existencias por sede (como en el caso de clientes y empleados que tiene su criterio con el atributo Sede. Por tanto, es necesario generar dos tablas con las cuales se registran las ordenes, las existencias distribuidas por sede. Para esta finalidad se crearon las tablas Orden y DetalleOrden

Lo primero que vamos a hacer es fragmentar verticalmente para que la sede central (Centro) pueda visualizar todo el inventario y para que cada sede pueda visualizar solamente el código, nombre y valor del plato que cada una posee.

*/inventario general de productos para la sede central*/
Select *
into PlatosCentro
from Platos
/*Fragmentación Vertical de platos para discriminación por sede */
select Id_Plato ,nombrePlato,valor
Into Platos1
from Platos


La tabla Orden tiene el dato discriminatorio para la distribución: Sede. Debemos fragmentar verticalmente esta tabla para generar la discriminación por Sede
/* Fragmentación Vertical Pedidos para discriminación por sede*/
select *
into Orden1
from Orden

Finalmente, la tabla DetalleOrden no la vamos a fragmentar, porque los datos allí ingresados por cada sede llegarán a la sede central. Sin embargo, sí la vamos a derivar por Sede, para que cada sede pueda visualizar el inventario que posee y que fue enviado por la sede central a cada uno de los demás restaurantes.
/* Fragmentación derivada Horizontal Norte */
SELECT Platos1.*
into detalleNorte
FROM detalleOrden
INNER JOIN Platos1 ON detalleOrden.Id_Orden = Plato1.Id_Orden
INNER JOIN Platos1 ON detalleOrden.Id_Plato = Platos1.id_plato
WHERE (Orden1.Sede = 'Norte')

/*Fragmentación derivada Horizontal Centro */
SELECT Platos1.*
into detalleCentro
FROM detalleOrden
INNER JOIN Orden1 ON detalleOrden.Id_Orden = Orden1.Id_Orden
INNER JOIN Platos1 ON detalleOrden.Id_plato = Platos1.Id_plato
WHERE (Orden1.Sede = 'Centro')
/*Fragmentación derivada Horizontal Sur */
SELECT Platos1.*
into detalleSur
FROM detalleOrden
INNER JOIN Orden1 ON detalleOrden.Id_Orden= Orden1.Id_Orden
INNER JOIN Platos1 ON detalleOrden.Id_Plato = Platos1.Id_Plato
WHERE (Orden1.Sede = 'Sur')











Tabla asignación de fragmentos

Sitio     
Tablas
        Sur
   Norte
        Centro
Empleado
Empleado1Sur
Empleado1Norte
Empleado1Centro
EmpleadoCentro
Platos
Platos1
Platos1
Platos1
PlatosCentro
Orden
Orden1
Orden1
          Orden1
DetalleOrden
detalleOrdenSur
DetalleOrdenNorte
           DetalleOrdenCentro
Cliente
ClienteSur
ClienteNorte
           ClienteCentro






Comentarios

Entradas populares de este blog

Matrices especiales

Conclusiones Subnetting

Pruebas de escritorio de los ejemplos y PSeInt