TUTOR: ERNESTO ORLANDO PARRA CAON INGENIERO DE SISTEMAS
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BSICAS TECNOLOGA E INGENIERA PROGRAMA BASE DE DATOS BASICO FLORENCIA CAQUET 2013
INTRODUCCION
En el proceso de aprendizaje sobre la gestin de bases de datos, se encuentran las reglas para pasar de un modelo lgico de datos a un modelo relacional o diseo fsico. Esto consiste en tomar el modelo lgico y extraer la informacin sobre las tablas, sus campos, llaves primarias y llaves forneas, para de esta manera poder crear las tablas en cualquier gestor de bases de datos. Pero el tener la informacin guardad en las tablas, no servira de nada si no se pudieran consulta, es ah donde surge el lgebra relacional, que sienta las bases lgicas y conceptuales sobre la forma de extraer datos de las tablas y formar informacin til para la toma de decisiones. Para evitar tener datos repetidos, que consumen espacio en disco y hacen lenta la bsqueda de informacin, los datos almacenados en las tablas deben ser depurados esto se logra con las formas normales, que son herramientas conceptuales para tener bases de datos limpias de datos redundantes. Una vez se tiene la base de datos a este nivel se recurre a Mysql para materializar todo este modelo en tablas, campos, datos reales almacenados en archivos. Donde es posible realizar la gestin de la base de datos como insercin, modificacin, eliminacin, etc. Este es el objetivo de la presente prctica de laboratorio.
OBJETIVOS
Crear una base de datos con sus respectivas tablas utilizando toda la sintaxis del Lenguaje de Definicin de datos usando la herramienta Workbench y Mysql. Realizar adiciones, modificaciones y eliminaciones de registros usando el Lenguaje de Manipulacin de datos.
DESARROLLO DE ACTIVIDADES CASO DE ESTUDIO Una empresa de construcciones civiles est interesada en que se le disee una bases de datos relacional para el departamento de proyectos. Este departamento cuenta con una serie de dependencias, las cuales se encuentran codificadas y tienen un cdigo y un nombre. Cuando se realizan un contrato, se genera un proyecto, el cual es codificado tambin y pertenecen a una sola dependencia. De los proyectos se tiene un cdigo nico, el nombre y el presupuesto. A cada proyecto se le asigna un grupo de empleados y un gerente de proyecto, que a la vez es empleado. De los empleados se quiere tener el nmero de identificacin, tipo de identificacin, nombres, apellidos, direccin residencia, nmero telfono residencia y celular. Al finalizar el proyecto, se realiza las evaluaciones del desempeo de cada uno de los empleados que trabaj en este y de esto se tiene la fecha inicial y final real en que particip en el proyecto, adems de la calificacin obtenida entre 1 y 5, y una observacin dada por el gerente del proyecto. Adems se sabe que: Una dependencia puede tener varios proyectos. Un empleado puede haber trabajado en varios proyectos, pero en un momento dado, solo trabaja en un solo proyecto. Una dependencia, solo pertenece a un departamento. Un proyecto solo tiene un gerente de proyecto y un empleado puede haber gerenciado varios proyectos.
Con base en el modelo relacional de la empresa de construcciones civiles, cree una base de datos
MODELO ENTIDAD-RELACION OBRACIVIL.
Las instrucciones para llevar este modelo a una base de datos son:
*************************************************** CREATE SCHEMA IF NOT EXISTS `OBRACIVIL`;
CREATE TABLE IF NOT EXISTS `OBRACIVIL`.`DEPENDENCIAS` ( `codigodepen` INT NOT NULL , `nombredepen` VARCHAR(45) NOT NULL , PRIMARY KEY (`codigodepen`) ) ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `OBRACIVIL`.`PROYECTOS` ( `codigopro` INT NOT NULL , `nombrepro` VARCHAR(45) NOT NULL , `preupuestopro` FLOAT NULL , `DEPENDENCIAS_codigodepen` INT NOT NULL , `GERENTES_nroidengeren` INT NOT NULL , PRIMARY KEY (`codigopro`, `DEPENDENCIAS_codigodepen`, `GERENTES_nroidengeren`) , CONSTRAINT `fk_PROYECTOS_DEPENDENCIAS` FOREIGN KEY (`DEPENDENCIAS_codigodepen` ) REFERENCES `OBRACIVIL`.`DEPENDENCIAS` (`codigodepen` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_PROYECTOS_GERENTES1` FOREIGN KEY (`GERENTES_nroidengeren` ) REFERENCES `OBRACIVIL`.`GERENTES` (`nroidengeren` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `OBRACIVIL`.`EMPLEADOS` ( `nroidenemple` INT NOT NULL , `tipodenemple` VARCHAR(3) NULL , `nombresemple` VARCHAR(45) NULL , `apellidosemple` VARCHAR(45) NULL , `dirresiemple` VARCHAR(45) NULL , `numtelresemple` VARCHAR(10) NULL , `celularemple` VARCHAR(10) NULL , `PROYECTOS_codigopro` INT NOT NULL , `PROYECTOS_DEPENDENCIAS_codigodepen` INT NOT NULL , PRIMARY KEY (`nroidenemple`, `PROYECTOS_codigopro`, `PROYECTOS_DEPENDENCIAS_codigodepen`) , CONSTRAINT `fk_EMPLEADOS_PROYECTOS1` FOREIGN KEY (`PROYECTOS_codigopro` , `PROYECTOS_DEPENDENCIAS_codigodepen` ) REFERENCES `OBRACIVIL`.`PROYECTOS` (`codigopro` , `DEPENDENCIAS_codigodepen` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `OBRACIVIL`.`EVALUACIONES` ( `ideval` INT NOT NULL AUTO_INCREMENT , `fechainicial` DATE NULL , `fechafinal` DATE NULL , `calificacion` INT NULL , `observacion` TEXT NULL , `EMPLEADOS_nroidenemple` INT NOT NULL , `EMPLEADOS_PROYECTOS_codigopro` INT NOT NULL , `EMPLEADOS_PROYECTOS_DEPENDENCIAS_codigodepen` INT NOT NULL , `GERENTES_nroidengeren` INT NOT NULL , PRIMARY KEY (`ideval`, `EMPLEADOS_nroidenemple`, `EMPLEADOS_PROYECTOS_codigopro`, `EMPLEADOS_PROYECTOS_DEPENDENCIAS_codigodepen`, `GERENTES_nroidengeren`) , CONSTRAINT `fk_EVALUACIONES_EMPLEADOS1` FOREIGN KEY (`EMPLEADOS_nroidenemple` , `EMPLEADOS_PROYECTOS_codigopro` , `EMPLEADOS_PROYECTOS_DEPENDENCIAS_codigodepen` ) REFERENCES `OBRACIVIL`.`EMPLEADOS` (`nroidenemple` , `PROYECTOS_codigopro` , `PROYECTOS_DEPENDENCIAS_codigodepen` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_EVALUACIONES_GERENTES1` FOREIGN KEY (`GERENTES_nroidengeren` ) REFERENCES `OBRACIVIL`.`GERENTES` (`nroidengeren` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `OBRACIVIL`.`HISTORIAPROYECTOS` ( `hisproyectos` INT NOT NULL AUTO_INCREMENT , `PROYECTOS_codigopro` INT NOT NULL , `PROYECTOS_DEPENDENCIAS_codigodepen` INT NOT NULL , `PROYECTOS_GERENTES_nroidengeren` INT NOT NULL , `EMPLEADOS_nroidenemple` INT NOT NULL , `EMPLEADOS_PROYECTOS_codigopro` INT NOT NULL , `EMPLEADOS_PROYECTOS_DEPENDENCIAS_codigodepen` INT NOT NULL , PRIMARY KEY (`hisproyectos`, `PROYECTOS_codigopro`, `PROYECTOS_DEPENDENCIAS_codigodepen`, `PROYECTOS_GERENTES_nroidengeren`, `EMPLEADOS_nroidenemple`, `EMPLEADOS_PROYECTOS_codigopro`, `EMPLEADOS_PROYECTOS_DEPENDENCIAS_codigodepen`) , CONSTRAINT `fk_HISTORIAPROYECTOS_PROYECTOS1` FOREIGN KEY (`PROYECTOS_codigopro` , `PROYECTOS_DEPENDENCIAS_codigodepen` , `PROYECTOS_GERENTES_nroidengeren` ) REFERENCES `OBRACIVIL`.`PROYECTOS` (`codigopro` , `DEPENDENCIAS_codigodepen` , `GERENTES_nroidengeren` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_HISTORIAPROYECTOS_EMPLEADOS1` FOREIGN KEY (`EMPLEADOS_nroidenemple` , `EMPLEADOS_PROYECTOS_codigopro` , `EMPLEADOS_PROYECTOS_DEPENDENCIAS_codigodepen` ) REFERENCES `OBRACIVIL`.`EMPLEADOS` (`nroidenemple` , `PROYECTOS_codigopro` , `PROYECTOS_DEPENDENCIAS_codigodepen` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
*************************************************** Se genera la siguiente base de datos:
Se realizan las siguientes operaciones:
a) Modificar la estructura de una tabla.
ALTER TABLE empleados DROP celularemple;
Se elimina un campo a la tabla empleados Tabla original Tabla despus de la modificacin
b) Adicionar valores a las tablas.
Se procede a adicionar los registros. INSERT INTO dependencias (codigodepen,nombredepen) VALUES('454545','Gerencia'); INSERT INTO dependencias (codigodepen,nombredepen) VALUES('666666','Sistemas'); INSERT INTO dependencias (codigodepen,nombredepen) VALUES('774433','Compras');
INSERT INTO proyectos (codigopro,nombrepro,preupuestopro,Dependencias_codigodepen,gerentes_nroidengeren) VALUES('222222','rurales','450000','454545','92513890'); INSERT INTO proyectos (codigopro,nombrepro,preupuestopro,Dependencias_codigodepen,gerentes_nroidengeren) VALUES('333333','calles','450000','454545','92513890');
c) Eliminar una fila en alguna tabla
DELETE FROM dependencias WHERE codigodepen='666666';
Tabla original Tabla despus de la eliminacin
d) Actualizar una fila UPDATE dependencias SET nombredepen='Desarrollo' WHERE codigodepen='774433';
El resultado es el siguiente:
Tabla original Tabla despus de la modificacin
CONCLUSIONES
En el desarrollo del presente trabajo colaborativo, resultan las siguientes conclusiones:
Al llevar toda la teora aprendida en el curso de bases de datos bsicos a la prctica usando un SGBD como Mysql, es cuando cobra sentido todo el concepto de relacional, ya que de manera directa se puede ver el efecto de una buena o mala relacin entre las tablas. Aplicar la sintaxis del Lenguaje de Definicin de datos permite ver crearse el archivo en el disco duro del diseo que tenamos en el papel, lo cual es muy satisfactorio. Aplicar el Lenguaje de Manipulacin de datos, usando la herramienta MySql, permite jugar con los datos, podemos insertarlos, modificarlos, borrarlos, lo cual da sentido al concepto de gestin de bases de datos. Con la generacin de consultas simples y compuestas es cuando vemos todo el poder para la gestin de datos que nos brindan los Gestores de Bases de Datos.
REFERENCIAS BIBLIOGRAFICAS
SNCHEZ, M.D.A. . Bases de Datos Bsicos. Universidad Nacional Abierta y a Distancia. Medelln, 2011.
GUA PRACTICA DE LABORATORIO. Bases De Datos Bsico- Universidad Nacional Abierta y a Distancia. 2013.
Modelo Entidad Relacin. http://dis.unal.edu.co/profesores/eleon/cursos/BD/ presentaciones/ teo3_modelo er.pdf Consultado el 23 nov de 2013.
Modelo Relacional. http://www.tejedoresdelweb.com/wiki/images/a/a5/ Bases datos_teo5_modelo_relacional.pdf Consultado el 23 de nov de 2013.