Anda di halaman 1dari 35

ESCUELA POLITCNICA NACIONAL

FACULTAD DE INGENIERA DE SISTEMAS

TEMA

PROYECTO FINAL

MATERIA:

BASES DE DATOS DISTRIBUIDAS

PROFESOR

ING. HENRY ECHEVERRA

ESTUDIANTES

JOS MARTN DAZ


RUBN ANDRS JCOME
JONATHAN JAVIER QUINCHIGUANGO

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:
-

Los centros se identifican mediante su cdigo de centro, que es 01 y 02 respectivamente.


Cada centro tiene un nombre, una direccin y un telfono.
En cada centro trabajan varios tutores, que slo pertenecen a uno de los centros.
El Instituto almacena los siguientes datos de cada tutor: cdigo, CI, nombre, telfono, especialidad,
salario, fecha de contrato.
En el centro principal (Cd_Centro = 01) se elaboran las nminas de los tutores contratados por el
Instituto y de aqu se envan al otro Centro para ser repartidas a los tutores. Por esta razn se guarda
informacin sobre el salario de los tutores del Instituto, as como tambin su fecha de contrato.
Cada centro dicta algunos cursos. Dichos cursos son exclusivos de cada centro. Sobre ellos existe un
cdigo, una descripcin, un da a la semana y una hora de inicio. Adems, un curso puede ser del tipo arte
o msica.
Varios alumnos pueden inscribirse dentro de cada curso, establecindose una fecha de inscripcin por
alumno y curso. Un alumno tiene un cdigo que lo identifica, un nombre, edad y telfono.
Adems un tutor dirige un solo curso en especfico.

Se solicita:
-

Realizar el diseo centralizado puro de la BD


Esquema E/R
Identificar los sitios de distribucin (SEDES) y sus respectivos roles
Tabla de sedes y roles
Analizar qu distribuir (identificacin accesos frecuentes, etc)
Resumen del anlisis
Fragmentacin
Esquema de fragmentacin
Asignacin de fragmentos a los sitios
Esquema de asignacin
Replicacin
Esquema de replicacin

MODELO ENTIDAD/RELACIN

MODELO RELACIONAL
CENTRO (cod_centro, nombre_centro, direccin_centro, telfono_centro)
DNA, UNA
DNA, UNA

TUTOR (cod_tutor, ci_tutor, nombre_tutor, telfono_tutor, especialidad, salario, fecha_contrato, cod_centro)


DNA, UNA
DNA, UNA

CURSO (cod_curso, descripcin, dia, hora, cod_centro, tipo, cod_tutor)

TOMA_CURSO (cod_curso, cod_alumno, fecha_inscripcion)


DNA, UNA

ALUMNO (cod_alumno, nombre_alumno, edad, telfono_alumno)

ROLES
Centro
01

02

Rol
Nminas de Tutores
Centro
Centro

REPLICACIN
Centro

Porque en cada centro es necesaria la informacin de todos los centros.

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).

2. Fragmentacin Horizontal Primaria


_ = = (_ )

= {01, 02}

Porque en cada centro se necesita tener la informacin de sus respectivos tutores.

3. Fragmentacin Horizontal Primaria


= = ()

= {01, 02}

Porque en cada centro se necesita tener la informacin de sus respectivos cursos.

4. Fragmentacin Horizontal Derivada


_ = _

Porque en cada centro se necesita tener la informacin de qu estudiantes toman qu cursos.

5. Fragmentacin Horizontal Derivada


_ = _

Porque en cada centro se necesita tener la informacin de sus respectivos estudiantes.

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

BASE DE DATOS CENTRALIZADA


ESQUEMA DE LA BASE DE DATOS CENTRALIZADA
USE MASTER
DROP DATABASE PROYECTO
CREATE DATABASE PROYECTO
USE PROYECTO
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

Create table [TomaCurso]


(
[codCurso] Char(3) NOT NULL,
[codAlumno] Char(3) NOT NULL,
[fechaInicio] Date NOT NULL,
Primary Key ([codCurso],[codAlumno])
)
go

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]) references [Tutor]
([codTutor]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codCurso]) references [Curso]
([codCurso]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codAlumno]) references [Alumno]
([codAlumno]) on update no action on delete no action
go
SET DATEFORMAT DMY
INSERT INTO CENTRO VALUES ('01', 'CENTROUNO', 'AMAZONAS Y NACIONES UNIDAS',
'2567896451')
INSERT INTO CENTRO VALUES ('02', 'CENTRODOS', 'COTOCOLLAO', '2567896451')
INSERT INTO ALUMNO
'0478965580')
INSERT INTO ALUMNO
INSERT INTO ALUMNO
INSERT INTO ALUMNO

VALUES ('A01', 'JORGE HERRERA', '30/05/1995',


VALUES ('A02', 'ANA DIAZ', '17/07/1995', '0047890025')
VALUES ('A03', 'JUAN VELASCO', '09/02/1994', '0478945658')
VALUES ('A04', 'KEVIN MORENO', '1/11/1994', '1111965580')

INSERT INTO Tutor VALUES ('T01', '1513365598', 'JUAN PEREZ', '2655672658',


'CANTO', 3000, '30/06/2005', '01')
INSERT INTO Tutor VALUES ('T02', '1213363398', 'FRANCISCO CALDERON',
'2612345654', 'PIANO', 5000, '25/03/2000', '01')
INSERT INTO Tutor VALUES ('T03', '1113365398', 'MARTIN MEJIA', '2287935663',
'GUITARRA', 8000, '16/12/2001', '02')
INSERT INTO Tutor VALUES ('T04', '1011765598', 'GABRIEL REYES', '2658294631',
'ARTES', 4000, '10/02/2010', '02')
INSERT INTO
'09:00:00',
INSERT INTO
'10:00:00',
INSERT INTO
'16:00:00',

Curso
'02',
Curso
'02',
Curso
'01',

VALUES ('C01', 'PINTURA', 'PINTURA EN PAPEL', 'MIERCOLES',


'T04')
VALUES ('C02', 'GUITARRA', 'CLASES DE GUITARRA', 'MARTES',
'T03')
VALUES ('C03', 'CANTO', 'CLASES DE CANTO', 'LUNES',
'T01')

INSERT INTO Curso VALUES ('C04', 'PIANO', 'CLASES DE PIANO', 'VIERNES',


'08:00:00', '01', 'T02')
INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

TomaCurso
TomaCurso
TomaCurso
TomaCurso

VALUES
VALUES
VALUES
VALUES

('C01',
('C02',
('C03',
('C04',

SELECT * FROM PROYECTO.DBO.CENTRO

SELECT * FROM PROYECTO.DBO.ALUMNO

SELECT * FROM PROYECTO.DBO.CURSO

SELECT * FROM PROYECTO.DBO.TOMACURSO

SELECT * FROM PROYECTO.DBO.TUTOR

'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

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
Create table [TomaCurso]
(
[codCurso] Char(3) NOT NULL,
[codAlumno] Char(3) NOT NULL,
[fechaInicio] Date NOT NULL,
Primary Key ([codCurso],[codAlumno])
)
go
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]) references [Tutor]
([codTutor]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codCurso]) references [Curso]
([codCurso]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codAlumno]) references [Alumno]
([codAlumno]) on update no action on delete no action
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

Create table [TomaCurso]


(
[codCurso] Char(3) NOT NULL,
[codAlumno] Char(3) NOT NULL,
[fechaInicio] Date NOT NULL,
Primary Key ([codCurso],[codAlumno])
)
go
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]) references [Tutor]
([codTutor]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codCurso]) references [Curso]
([codCurso]) on update no action on delete no action
go
Alter table [TomaCurso] add foreign key([codAlumno]) references [Alumno]
([codAlumno]) on update no action on delete no action
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.

FRAGMENTACIN Y REPLICACIN DE LA BASE DE DATOS


CENTRALIZADA
Sabemos que al ser una base de datos distribuida, deben existir datos locales y remotos para permitir un
mejor rendimiento de las consultas, inserciones y eliminaciones. La fragmentacin y replicacin nos
ayudar con este problema.
Utilizaremos los esquemas de asignacin y fragmentacin antes definidos y simplemente los pasaremos
a la base de datos real definida.
Para esto utilizaremos sentencias SQL que nos permitan cumplir con esta funcionalidad.

REPLICACION
TABLA CENTRO
INSERT INTO CENTROUNO.DBO.Centro
SELECT * FROM PROYECTO.DBO.Centro
SELECT * FROM CENTROUNO.DBO.CENTRO

INSERT INTO CENTRODOS.DBO.Centro


SELECT * FROM PROYECTO.dbo.Centro
SELECT * FROM CENTRODOS.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

INSERT INTO CENTRODOS.DBO.TUTOR


SELECT * FROM PROYECTO.DBO.TUTOR
WHERE CODCENTRO = '02'
SELECT * FROM CENTRODOS.DBO.TUTOR

TABLA CURSO (FRAGMENTACION HORIZONTAL PRIMARIA)


INSERT INTO CENTROUNO.DBO.CURSO
SELECT * FROM PROYECTO.DBO.CURSO
WHERE CODCENTRO = '01'
SELECT * FROM CENTROUNO.DBO.CURSO

INSERT INTO CENTRODOS.DBO.CURSO


SELECT * FROM PROYECTO.DBO.CURSO
WHERE CODCENTRO = '02'
SELECT * FROM CENTRODOS.DBO.CURSO

TABLA ALUMNO (FRAGMENTACION HORIZONTAL DERIVADA)


Como podemos observar, la tabla alumno no puede ser fragmentada directamente puesto que ningn
dato de esta tabla es utilizado para una fragmentacin. Para resolver esto es necesario fragmentar en
primer lugar la tabla tomaCurso. Sin embargo esta tabla no podr ser llenada puesto que su clave
fornea (codAlumno) depende de la tabla alumno (la cual an no tiene valores en los servidores
distribuidos).
Para resolver este pequeo problema utilizaremos un artificio que consiste en llenar la tabla alumnos
en los diferentes nodos con todos los alumnos de la base centralizada (aunque estos alumnos no sean
parte de cada nodo) para luego borrar aquellos que no pertenezcan al nodo correspondiente. De la
siguiente manera:
INSERT INTO CENTROUNO.DBO.ALUMNO
SELECT * FROM PROYECTO.DBO.ALUMNO
INSERT INTO CENTRODOS.DBO.ALUMNO
SELECT * FROM PROYECTO.DBO.ALUMNO

Aqu brindaremos a ambos nodos todos los alumnos disponibles en la base de datos centralizada. De
esta manera podremos fragmentar la tabla tomaCurso

TABLA TOMACURSO (FRAGMENTACION HORIZONTAL DERIVADA)


INSERT INTO CENTROUNO.DBO.TOMACURSO
SELECT * FROM PROYECTO.DBO.TOMACURSO
WHERE CODCURSO IN (SELECT CODCURSO FROM CENTROUNO.DBO.CURSO)
SELECT * FROM CENTROUNO.DBO.TOMACURSO

INSERT INTO CENTRODOS.DBO.TOMACURSO


SELECT * FROM PROYECTO.DBO.TOMACURSO
WHERE CODCURSO IN (SELECT CODCURSO FROM CENTRODOS.DBO.CURSO)
SELECT * FROM CENTRODOS.DBO.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,

[codCentro] Char(3) NOT NULL,


Primary Key ([codTutor], [codCentro])
)
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], [codCentro])
)
go

Create table [TomaCurso]


(
[codCurso] Char(3) NOT NULL,
[codAlumno] Char(3) NOT NULL,
[fechaInicio] Date NOT NULL,
[codCentro] Char(3) NOT NULL,
Primary Key ([codCurso],[codAlumno], [codCentro])
)
go

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

Y finalmente realizaremos los check constraints.


ALTER TABLE TUTOR ADD CONSTRAINT ck_tutor check (codCentro = '01')
ALTER TABLE CURSO ADD CONSTRAINT ck_curso check (codCentro = '01')
ALTER TABLE ALUMNO ADD CONSTRAINT ck_alumno check (codCentro = '01')
ALTER TABLE TOMACURSO ADD CONSTRAINT ck_tomaCurso check (codCentro = '01')

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')

VALUES ('A01', 'JORGE HERRERA', '30/05/1995',


VALUES ('A02', 'ANA DIAZ', '17/07/1995', '0047890025',
VALUES ('A03', 'JUAN VELASCO', '09/02/1994',
VALUES ('A04', 'KEVIN MORENO', '1/11/1994',

SELECT * FROM V_ALUMNO

SELECT * FROM CENTROUNO.DBO.ALUMNO

SELECT * FROM CENTRODOS.DBO.ALUMNO

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.

Procedimiento almacenado para la consulta de la informacin de los Centros

Procedimiento almacenado para la consulta de Tutores

Procedimiento almacenado para la insercin de Tutores

Procedimiento almacenado para la consulta de Alumnos

Procedimiento almacenado para la insercin de Alumnos

Procedimiento almacenado para la consulta de Cursos

Procedimiento almacenado para la insercin de Cursos

EJECUCIN DE LA APLICACIN

Ejemplo de Insercin
Comprobamos la insercin de un alumno.

Presionamos el botn Insertar y refrescamos la pgina web

Nos muestra que se ha insertado


Ahora verificamos que se haya insertado correctamente en la vista.

Ahora verificamos que se haya insertado en el nodo correcto, en este caso es el Centro 01.

Por ltimo verificamos que no se haya insertado en el Centro 02

Efectivamente todo ha ocurrido como se esperaba.

Anda mungkin juga menyukai