Vous êtes sur la page 1sur 15

OPTIMIZACIN DE LA ESTRUCTURA DE LA BASE DE DATOS PARA LA

ALCALDA DE SAN ANTONIO DEL SENA

PRESENTADO POR:
Luis Guillermo Agudelo Quintero

PRESENTADO A:
Diana Mara Rico Mesa
Lder de ficha especializacin en Gestin Y Seguridad De Bases De Datos

SERVICIO NACIONAL DE APRENDIZAJE SENA DATOS


11 de Abril de 2017
TABLA MuestraMensual

Esta tabla est normalizada por cuanto los valores que se repiten como
idIndicador es el campo que permite relacionarse con la tabla Indicador, y los
valores de Fecha, Mes y valor son atributos de cada registro son valores que
no tienen grupos de repeticin.

TABLA Recurso

Esta tabla est normalizada.


TABLA Indicador

Esta tabla se debe normalizar, evidenciamos:

El campo TipoIndicador se repite


El campo Ambito se repite

Indicador
[idIndicador]
[idRecurso]
[NombreIndicador]
[Sigla] TipoIndicador
[idTipoIndicador] [idTipoIndicador]
[IdAmbito] [TipoIndicador]
[Descripcion]
Ambito
[idAmbito]
[Ambito]

Debemos crear primero las nuevas tablas:


TABLA TipoIndicador (NUEVA)

CREATE TABLE [dbo].[TipoIndicador](


[idTipoIndicador] [int] IDENTITY NOT NULL PRIMARY KEY,
[TipoIndicador] [varchar](30)
);

Y realizamos la insercin de los registros correspondientes en la nueva tabla


usando la funcin DISTINCT para que los valores sea distintos y no se repitan
en la nueva tabla.
INSERT INTO TipoIndicador (TipoIndicador)
SELECT DISTINCT
TipoIndicador = [Indicador].[TipoIndicador]
FROM Indicador

TABLA Ambito (NUEVA)

CREATE TABLE [dbo].[Ambito](


[idAmbito] [int] IDENTITY NOT NULL PRIMARY KEY,
[Ambito] [varchar](30)
);

Y realizamos igualmente la insercin de los registros correspondientes en la


nueva tabla usando la funcin DISTINCT para que los valores sea distintos y
no se repitan.
INSERT INTO Ambito (Ambito)
SELECT DISTINCT
Ambito = [Indicador].[Ambito]
FROM Indicador

Ahora debemos modificar la tabla Indicador, y agregarle los campos


idTipoIndicador y idAmbito.
ALTER TABLE dbo.Indicador ADD idTipoIndicador INT NULL, idAmbito INT NULL;

Ahora vamos actualizar los valores de estos campos de acuerdo a las tablas
creadas anteriormente.

UPDATE [dbo].[Indicador]
SET [idTipoIndicador] = T.idTipoIndicador
FROM Indicador I INNER JOIN TipoIndicador T ON I.TipoIndicador = T.TipoIndicador

Ya actualizo entonces idTipoIndicador en la tabla.

Ahora vamos actualizar el campo idAmbito.

UPDATE [dbo].[Indicador]
SET [idAmbito] = A.idAmbito
FROM Indicador I INNER JOIN Ambito A ON I.Ambito = A.Ambito

Ya actualizo entonces idAmbito en la tabla


A continuacin procedemos a eliminar las columnas TipoIndicador y Ambito
de la tabla Indicador.
ALTER TABLE dbo.Indicador DROP COLUMN TipoIndicador, Ambito;

Para finalizar la normalizacin de esta tabla crearemos las relaciones entre la


tabla Indicador - TipoIndicador y Ambito.
ALTER TABLE dbo.Indicador ADD CONSTRAINT fk_idTipoIndicador FOREIGN KEY
(idTipoIndicador) REFERENCES TipoIndicador (idTipoIndicador);

ALTER TABLE dbo.Indicador ADD CONSTRAINT fk_idAmbito FOREIGN KEY (idAmbito)


REFERENCES Ambito (idAmbito);

TABLA Zona
Esta tabla se debe normalizar, se evidencia que el campo TipoZona se repite.

Zona
[idZona]
[ NombreZona] TipoZona
[TipoZona] [idTipoZona]
[TipoZona]

Debemos crear primero la tabla:

TABLA TipoZona (NUEVA)

CREATE TABLE [dbo].[TipoZona](


[idTipoZona] [int] IDENTITY NOT NULL PRIMARY KEY,
[TipoZona] [varchar](20)
);

Ahora realizamos la insercin de los registros correspondientes en TipoZona


usando la funcin DISTINCT para que los valores sean distintos y no se repitan
haciendo una consulta SELECT.
INSERT INTO TipoZona (TipoZona)
SELECT DISTINCT
TipoZona = [Zona].[TipoZona]
FROM Zona
Ahora modificamos la tabla Zona, y agregarle el campo idTipoZona.

ALTER TABLE dbo.Zona ADD idTipoZona INT NULL;

Luego actualizamos los valores de este campo de acuerdo a la tabla TipoZona


creada.

UPDATE [dbo].[Zona]
SET [idTipoZona] = T.idTipoZona
FROM Zona Z INNER JOIN TipoZona T ON T.TipoZona = Z.TipoZona

Ya actualizo entonces idTipoZona en la tabla.

Aqu eliminamos la columna TipoZona, que remplace con el campo


IdTipoZona.
ALTER TABLE dbo.Zona DROP COLUMN TipoZona;

Y me quedara as:
Para finalizar la normalizacin de la tabla creare la relacin entre las tablas
Zona - TipoZona.
ALTER TABLE dbo.Zona ADD CONSTRAINT fk_idTipoZona FOREIGN KEY (idTipoZona)
REFERENCES TipoZona (idTipoZona);

Ahora el modelo de las dos tablas quedara as:

Para finalizar la normalizacin de la base de datos, analizaremos la tabla


EstacionMuestreo:

Esta tabla se debe normalizar, porque observamos dos hechos:

El campo Nombre se repite


El campo Ubicacion se repite

Indicador Estacion
[idEstacionMuestreo]
[idEstacion]
[idZona] [Nombre]
[Nombre]
[Ubicacin] Ubicacion
[Longitud] [idUbicacion]
[Ubicacion]
Crearemos las nuevas tablas:
TABLA Estacion (NUEVA)

CREATE TABLE [dbo].[Estacion](


[idEstacion] [int] IDENTITY NOT NULL PRIMARY KEY,
[Nombre] [varchar](50)
);

Y realizamos la insercin de los registros correspondientes en la nueva tabla


usando la funcin DISTINCT para que los valores sean distintos y no se repitan
en la nueva tabla.
INSERT INTO Estacion (Nombre)
SELECT DISTINCT
Nombre = [EstacionMuestreo].[Nombre]
FROM EstacionMuestreo

TABLA Ubicacion (NUEVA)

CREATE TABLE [dbo].[Ubicacion](


[idUbicacion] [int] IDENTITY NOT NULL PRIMARY KEY,
[Ubicacion] [varchar](300)
);

Y realizamos igualmente la insercin de los registros correspondientes en la


nueva tabla usando la funcin DISTINCT para que los valores sean distintos y
no se repitan.
INSERT INTO Ubicacion (Ubicacion)
SELECT DISTINCT
Ubicacion = [EstacionMuestreo].[Ubicacin]
FROM EstacionMuestreo

Y nos quedara la tabla as:


Como hicimos anteriormente, vamos a agregar dos nuevos campos
idUbicacion y idEstacion.
ALTER TABLE dbo.EstacionMuestreo ADD idEstacion INT NULL, idUbicacion INT NULL;

A continuacin actualizamos los valores de estos campos de acuerdo a las


tablas creadas anteriormente.
UPDATE [dbo].[EstacionMuestreo]
SET [idEstacion] = E.idEstacion
FROM Estacion E INNER JOIN EstacionMuestreo M ON E.Nombre = M.Nombre

Ahora vamos actualizar el campo idUbicacion.


UPDATE [dbo].[EstacionMuestreo]
SET [idUbicacion] = U.idUbicacion
FROM Ubicacion U INNER JOIN EstacionMuestreo M ON U.Ubicacion = M.Ubicacin

Actualizada la tabla quedara as:

Ahora eliminamos las columnas Nombre y Ubicacin de la tabla


EstacionMuestreo.
ALTER TABLE dbo.EstacionMuestreo DROP COLUMN Nombre, Ubicacin;

Para finalizar la normalizacin de esta tabla crearemos las relaciones entre la


tabla EstacionMuestreo - Estacion y Ubicacion.
ALTER TABLE dbo.EstacionMuestreo ADD CONSTRAINT fk_idEstacion FOREIGN KEY
(idEstacion) REFERENCES Estacion (idEstacion);

ALTER TABLE dbo.EstacionMuestreo ADD CONSTRAINT fk_idubicacion FOREIGN KEY


(idubicacion) REFERENCES ubicacion (idubicacion);

Ahora el modelo de las tres tablas quedara as:


El modelo relacional normalizado

Vous aimerez peut-être aussi