Normalizacion Base de Datos

OPTIMIZACIÓN DE LA ESTRUCTURA DE LA BASE DE DATOS PARA LA ALCALDÍA DE SAN ANTONIO DEL SENA PRESENTADO POR: Luis Guiller

Views 176 Downloads 5 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

OPTIMIZACIÓN DE LA ESTRUCTURA DE LA BASE DE DATOS PARA LA ALCALDÍA DE SAN ANTONIO DEL SENA

PRESENTADO POR: Luis Guillermo Agudelo Quintero

PRESENTADO A: Diana María Rico Mesa Líder de ficha especialización en Gestión 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 repetición. 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 inserción de los registros correspondientes en la nueva tabla usando la función 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 inserción de los registros correspondientes en la nueva tabla usando la función 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 idTipoIndicador y idAmbito.

agregarle los campos

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 continuación procedemos a eliminar las columnas TipoIndicador y Ambito de la tabla Indicador. ALTER TABLE dbo.Indicador DROP COLUMN TipoIndicador, Ambito;

Para finalizar la normalización 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 inserción de los registros correspondientes en TipoZona usando la función 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 normalización de la tabla creare la relación 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 quedaría así:

Para finalizar la normalización 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] [Ubicación] [Longitud]

Crearemos las

Ubicacion [idUbicacion] [Ubicacion]

nuevas tablas:

TABLA Estacion (NUEVA) CREATE TABLE [dbo].[Estacion]( [idEstacion] [int] IDENTITY NOT NULL PRIMARY KEY, [Nombre] [varchar](50) );

Y realizamos la inserción de los registros correspondientes en la nueva tabla usando la función 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 inserción de los registros correspondientes en la nueva tabla usando la función DISTINCT para que los valores sean distintos y no se repitan. INSERT INTO Ubicacion (Ubicacion) SELECT DISTINCT Ubicacion = [EstacionMuestreo].[Ubicación] FROM EstacionMuestreo

Y nos quedaría 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 continuación 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.Ubicación

Actualizada la tabla quedaría así:

Ahora eliminamos las EstacionMuestreo.

columnas

Nombre

y

Ubicación

de

la

tabla

ALTER TABLE dbo.EstacionMuestreo DROP COLUMN Nombre, Ubicación;

Para finalizar la normalización 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 quedaría así:

El modelo relacional normalizado