TEMA
PROYECTO FINAL
MATERIA:
PROFESOR
ESTUDIANTES
FECHA
01 DE AGOSTO DE 2015
TABLA DE CONTENIDO
ESCENARIO .............................................................................................................................................. 3
MODELO ENTIDAD/RELACIN ................................................................................................................. 4
MODELO RELACIONAL ............................................................................................................................. 5
ROLES .................................................................................................................................................. 6
REPLICACIN ....................................................................................................................................... 6
FRAGMENTACIN................................................................................................................................ 6
ESQUEMA DE ASIGNACIN .................................................................................................................. 7
BASE DE DATOS CENTRALIZADA .............................................................................................................. 8
ESQUEMA DE LA BASE DE DATOS CENTRALIZADA ................................................................................ 8
SERVIDORES VINCULADOS ..................................................................................................................... 11
FRAGMENTACIN Y REPLICACIN DE LA BASE DE DATOS CENTRALIZADA ............................................. 15
VISTAS PARTICIONADAS ........................................................................................................................ 19
APLICACIN WEB .................................................................................................................................. 23
EJECUCIN DE LA APLICACIN ........................................................................................................... 27
ESCENARIO
El Instituto de arte Chords & Colors posee dos centros locales en la ciudad. En cada uno de ellos se dictan
algunos cursos, los cuales cuentan con varios alumnos. Cada centro cuenta con un grupo de tutores que imparten
los cursos.
Actualmente el Instituto utiliza una base de datos relacional centralizada, a la cual acceden los centros, con el
esquema que se muestra a continuacin.
Se requiere disear una base de datos distribuida que gestione la informacin que maneja el Instituto, para
conseguir la mayor autonoma local posible en cada centro, para ello se conoce que el Instituto funciona de la
siguiente manera:
-
Se solicita:
-
MODELO ENTIDAD/RELACIN
MODELO RELACIONAL
CENTRO (cod_centro, nombre_centro, direccin_centro, telfono_centro)
DNA, UNA
DNA, UNA
ROLES
Centro
01
02
Rol
Nminas de Tutores
Centro
Centro
REPLICACIN
Centro
FRAGMENTACIN
1. Fragmentacin Vertical
_ =
, ,_
_ =
()
,,,,,_
()
Porque en el centro 01, se elaboran las nminas de los tutores (salario y fecha de contrato) y en
cada centro se necesita tener la informacin de sus tutores (ci, nombre, telfono, especialidad).
= {01, 02}
= {01, 02}
ESQUEMA DE ASIGNACIN
01
Centro
02
Centro
Tutor
Tutor_nmina
Tutor_informacin 01
Tutor_informacin 02
Curso
Curso 01
Curso 02
Toma_curso 01
Toma_curso 02
Alumno 01
Alumno 02
Centro
Toma_curso
Alumno
Curso
'02',
Curso
'02',
Curso
'01',
INTO
INTO
INTO
INTO
TomaCurso
TomaCurso
TomaCurso
TomaCurso
VALUES
VALUES
VALUES
VALUES
('C01',
('C02',
('C03',
('C04',
'A01',
'A02',
'A03',
'A04',
'10/10/2014')
'05/06/2015')
'27/11/2014')
'09/1/2015')
SERVIDORES VINCULADOS
Como se detalla en el enunciado del problema anterior, esta base de datos deber ser distribuida en 2
nodos, cada uno con sus roles definidos. (Roles definidos con anterioridad).Para esto deberemos crear
las siguientes bases de datos en los diferentes nodos. De esta manera podremos lograr que cada nodo
cumpla con las funcionalidades para las que fueron definidas.
CENTRO UNO:
USE master
DROP DATABASE CENTROUNO
create database CENTROUNO
USE CENTROUNO
Create table [Centro]
(
[codCentro] Char(3) NOT NULL,
[nombre] Varchar(30) NOT NULL,
[direccion] Varchar(30) NOT NULL,
[telefono] Char(10) NOT NULL,
Primary Key ([codCentro])
)
go
Create table [Alumno]
(
[codAlumno] Char(3) NOT NULL,
[nombre] Varchar(40) NOT NULL,
[fechaNacimiento] date NOT NULL,
[telefono] Char(10) NOT NULL,
Primary Key ([codAlumno])
)
go
Create table [Tutor]
(
[codTutor] Char(3) NOT NULL,
[CI] Char(10) NOT NULL,
[nombre] Varchar(40) NOT NULL,
[telefono] Char(10) NOT NULL,
[especialidad] Varchar(30) NOT NULL,
[salario] Money NOT NULL,
[fechaContrato] Date NULL,
[codCentro] Char(3) NOT NULL,
Primary Key ([codTutor])
)
go
Create table [TutorNomina]
(
[codTutor] Char(3) NOT NULL,
[salario] Money NOT NULL,
[fechaContrato] Date NULL,
Primary Key ([codTutor])
)
go
CENTRO DOS:
USE master
DROP DATABASE CENTRODOS
create database CENTRODOS
USE CENTRODOS
Create table [Centro]
(
[codCentro] Char(3) NOT NULL,
[nombre] Varchar(30) NOT NULL,
[direccion] Varchar(30) NOT NULL,
[telefono] Char(10) NOT NULL,
Primary Key ([codCentro])
)
go
Create table [Alumno]
(
[codAlumno] Char(3) NOT NULL,
[nombre] Varchar(40) NOT NULL,
[fechaNacimiento] date NOT NULL,
[telefono] Char(10) NOT NULL,
Primary Key ([codAlumno])
)
go
Create table [Tutor]
(
[codTutor] Char(3) NOT NULL,
[CI] Char(10) NOT NULL,
[nombre] Varchar(40) NOT NULL,
[telefono] Char(10) NOT NULL,
[especialidad] Varchar(30) NOT NULL,
[salario] Money NOT NULL,
[fechaContrato] Date NULL,
[codCentro] Char(3) NOT NULL,
Primary Key ([codTutor])
)
go
Create table [Curso]
(
[codCurso] Char(3) NOT NULL,
[Tipo] Varchar(10) NOT NULL,
[descripcion] Varchar(50) NOT NULL,
[dia] Varchar(10) NOT NULL,
[hora] time NOT NULL,
[codCentro] Char(3) NOT NULL,
[codTutor] Char(3) NOT NULL,
Primary Key ([codCurso])
)
go
Podemos observar que aunque ambos nodos son bastante similares, la tabla de Tutor Nomina
nicamente est ubicada en el centro UNO, puesto que es nicamente aqu en donde se almacenar
esta informacin. Aparte de este cambio, la base es sumamente similar.
REPLICACION
TABLA CENTRO
INSERT INTO CENTROUNO.DBO.Centro
SELECT * FROM PROYECTO.DBO.Centro
SELECT * FROM CENTROUNO.DBO.CENTRO
De esta manera replicaremos los datos de la base de datos centralizada referente a los centros en todos
los nodos de la base de datos distribuida.
FRAGMENTACION VERTICAL
TABLA NOMINA TUTOR
INSERT INTO CENTROUNO.DBO.TUTORNOMINA
SELECT CODTUTOR, SALARIO, FECHACONTRATO FROM PROYECTO.DBO.TUTOR
SELECT * FROM CENTROUNO.DBO.TUTORNOMINA
FRAGMENTACION HORIZONTAL
TABLA TUTOR (FRAGMENTACION HORIZONTAL PRIMARIA)
INSERT INTO CENTROUNO.dbo.Tutor
SELECT * FROM PROYECTO.DBO.Tutor
WHERE codCentro = '01'
SELECT * FROM CENTROUNO.DBO.TUTOR
Aqu brindaremos a ambos nodos todos los alumnos disponibles en la base de datos centralizada. De
esta manera podremos fragmentar la tabla tomaCurso
Como cada nodo ya conoce los codAlumno, se podr ejecutar esta sentencia para poder fragmentar la
tabla tomaCurso.
Finalmente borraremos los datos de la tabla Alumno que no corresponden a ese nodo dependiendo de
la fragmentacin de la tabla tomaCurso que acabamos de realizar.
DELETE CENTROUNO.DBO.ALUMNO
WHERE CODALUMNO NOT IN (SELECT CODALUMNO FROM CENTROUNO.DBO.TOMACURSO)
SELECT * FROM CENTROUNO.DBO.ALUMNO
DELETE CENTRODOS.DBO.ALUMNO
WHERE CODALUMNO NOT IN (SELECT CODALUMNO FROM CENTRODOS.DBO.TOMACURSO)
SELECT * FROM CENTRODOS.DBO.ALUMNO
Y as hemos logrado realizar las fragmentaciones mediante el uso sentencias SQL y un poco de ingenio.
VISTAS PARTICIONADAS
Las vistas particionadas nos proveen de una manera rpida y sencilla de realizar consultas e inserciones
en las diferentes tablas. Mediante la definicin de un constraint del tipo check la mismas vista ser la
encargada de decidir a cul de los servidores deber enviar la informacin.
En primer lugar generaremos nuevas claves primarias en las tablas, puesto que sin estas no se puede
realizar los checks. En el centro uno tendramos lo siguiente:
create database CENTROUNO
USE CENTROUNO
Create table [Centro]
(
[codCentro] Char(3) NOT NULL,
[nombre] Varchar(30) NOT NULL,
[direccion] Varchar(30) NOT NULL,
[telefono] Char(10) NOT NULL,
Primary Key ([codCentro])
)
go
Create table [Alumno]
(
[codAlumno] Char(3) NOT NULL,
[nombre] Varchar(40) NOT NULL,
[fechaNacimiento] date NOT NULL,
[telefono] Char(10) NOT NULL,
[codCentro] Char(3) NOT NULL,
Primary Key ([codAlumno], [codCentro])
)
go
DROP TABLE TUTOR
Create table [Tutor]
(
[codTutor] Char(3) NOT NULL,
[CI] Char(10) NOT NULL,
[nombre] Varchar(40) NOT NULL,
[telefono] Char(10) NOT NULL,
[especialidad] Varchar(30) NOT NULL,
[salario] Money NOT NULL,
[fechaContrato] Date NULL,
[codCentro] Char(3) NOT NULL,
Primary Key ([codTutor], [codCentro])
)
go
drop table tutornomina
Create table [TutorNomina]
(
[codTutor] Char(3) NOT NULL,
[salario] Money NOT NULL,
[fechaContrato] Date NULL,
Como podemos observar, todas las tablas poseen ahora una clave primaria con el nombre de
codCentro, puesto que ser en esta columna en donde se definirn los constraints tipo check.
Antes de eso debemos relacionar las tablas con claves forneas.
Alter table [Tutor] add foreign key([codCentro]) references [Centro]
([codCentro]) on update no action on delete no action
go
Alter table [Curso] add foreign key([codCentro]) references [Centro]
([codCentro]) on update no action on delete no action
go
Alter table [Curso] add foreign key([codTutor], [codCentro]) references
[Tutor] ([codTutor], [codCentro]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codCurso], [codCentro]) references
[Curso] ([codCurso], [codCentro]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codAlumno], [codCentro]) references
[Alumno] ([codAlumno], [codCentro]) on update no action on delete no action
Go
Hay que tomar en cuenta que el cdigo para el que estamos definiendo los checks es para el centro uno,
por lo que todos se igualan al valor de 01. El procedimiento es exactamente igual para el centro 2 con
la diferencia del valor al que se igualan los checks.
VISTAS
Ahora finalmente podremos crear las vistas particionadas. Cabe recalcar que para que funcionen
perfectamente es necesario realizar las vistas en todos los nodos de la base de datos distribuida.
SET XACT_ABORT ON
CREATE VIEW V_ALUMNO
AS
SELECT * FROM CENTROUNO.DBO.ALUMNO
UNION ALL
SELECT * FROM CENTRODOS.DBO.ALUMNO
CREATE VIEW V_CURSO
AS
SELECT * FROM CENTROUNO.DBO.CURSO
UNION ALL
SELECT * FROM CENTRODOS.DBO.CURSO
CREATE VIEW V_TOMACURSO
AS
SELECT * FROM CENTROUNO.DBO.TOMACURSO
UNION ALL
SELECT * FROM CENTRODOS.DBO.TOMACURSO
CREATE VIEW V_TUTOR
AS
SELECT * FROM CENTROUNO.DBO.TUTOR
UNION ALL
SELECT * FROM CENTRODOS.DBO.TUTOR
Al modificar la base de datos para poder realizar estas vistas, es necesario borrar toda la base puesto
que tiene nuevos constraints.
Sin embargo el nuevo ingreso de datos no ser ningn problema para las nuevas vistas puesto que estas
automticamente distribuirn los datos. Aunque la vista posee todos los datos, si realizamos consultas
nicamente a los centros distribuidos, se podr observar que estos nicamente tienen los datos que les
corresponden
Por ejemplo:
SET DATEFORMAT DMY
INSERT INTO V_ALUMNO
'0478965580', '02')
INSERT INTO V_ALUMNO
'02')
INSERT INTO V_ALUMNO
'0478945658', '01')
INSERT INTO V_ALUMNO
'1111965580', '01')
APLICACIN WEB
La aplicacin se conecta con las vistas definidas anteriormente y permite realizar las operaciones de
consulta e insercin de datos. Debido a que se conecta directamente con las vistas particionadas
siempre tendremos disponible toda la informacin de ambos centros. Y en el caso de las inserciones, las
vistas tambin nos ayudan a insertar los datos en el nodo correspondiente.
La conexin con las vistas se realiza a travs de procedimientos almacenados.
Dado que se realizarn las operaciones de consulta e insercin, se han definido dos procedimientos
almacenados por cada tabla, uno por cada operacin, los cuales se muestran a continuacin:
Ntese que las operaciones se realizan sobre las vistas.
EJECUCIN DE LA APLICACIN
Ejemplo de Insercin
Comprobamos la insercin de un alumno.
Ahora verificamos que se haya insertado en el nodo correcto, en este caso es el Centro 01.