UTEQ Firmado digitalmente por UTEQ Nombre de reconocimiento (DN): cn=UTEQ, o=UTEQ, ou=UTEQ, [email protected] , c=MX Fecha: 2015.09.11 10:19:42 -05'00' UNIVERSIDAD TECNOLÓGICA DE QUERÉTARO Nombre del proyecto: “REINGENIERÍA DE BASE DE DATOS” Empresa: IGLESIA UNIDAD CRISTIANA DE QUERÉTARO A.R. Memoria que como parte de los requisitos para obtener el título de: INGENIERO EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN Presenta: BREÑA DE JESÚS LUIS FERNANDO Asesor en la UTEQ Asesor en la Organización LIA. Silvia Elena Ortiz Maldonado Lic. Jorge Cupido Sánchez. Santiago de Querétaro, Qro. Septiembre del 2015 Resumen El presente documento detalla la metodología y las actividades realizadas para el desarrollo del proyecto Reingeniería de base de datos de la Iglesia Unidad Cristiana de Querétaro. Dicha base de datos se desarrolló con el lenguaje SQL mediante el entorno de diseño MysqlWorkbench. El proyecto surge de la necesidad de unificar las bases de datos existentes dentro de la Iglesia Unidad Cristiana. Como resultado se obtuvo una base de datos unificada e íntegra, para llevar un mejor control de la información y así tomar decisiones de manera más eficiente. Además de generar la respectiva documentación para posibles análisis y modificaciones futuras. Este trabajo sirvió de manera exitosa para adentrarse y aprender de una manera adecuada como se realiza un proyecto de esta magnitud en una empresa, teniendo como resultado el aprendizaje de una correcta implementación de la base de datos. (Palabras clave SQL, Integridad, Eficiencia) 2 Summary When I enter my internship, I hope to meet experienced professional that allow me to learn and get better knowledge. Also I hope to handle new technologies and systems to according to my interest, learn to analyze, design and implement system to generate higher quality software. Another part important for me to learn is to handle project management that allows me to keep track of important projects. I hope to learn new software development methodologies. Personally, I hope to learn to manage my time to keep better track of my activities.it is likely that many things are handled through the English language so I hope to learn the language practicing it as one of my priorities. I hope to learn to communicate effectively to help me have better relations. It is important to learn to work in teams to perform activities in a more effective way and finally the flexibility to adapt to new needs that the company can ask me. 3 Índice Página Resumen…………………………………………………………………….……………..2 Summary…………………………………………………………………………………...3 Índice……………………………………………………………………………………….4 l. INTRODUCCIÓN………………………………………………………………………..5 II. ANTECEDENTES…………………………………………………..………………….6 III. JUSTIFICACIÓN…………………………………………………..………...…….…..8 IV. OBJETIVOS………………………………………………………...………………….9 lV.l. OBJETIVOS ESPECÍFICOS………………………………………..……....9 V. ALCANCE………………………………………………………..…………...............11 VI. ANÁLISIS DE RIESGOS…………………………….………..…………………….13 VII. FUNDAMENTACIÓN TEÓRICA…………………………………………....……..15 VIII. PLAN DE ACTIVIDADES…………………………………………………..…..….21 IX. RECURSOS MATERIALES Y HUMANOS………………………………..…..….22 X. DESARROLLO DEL PROYECTO …………………………………………....……24 X.l. IDENTIFICACIÓN DEL PROBLEMA………………………………..……24 X.ll. RECOPILACIÓN DE INFORMACIÓN……………………………………24 X.lll. MODELO ENTIDAD-RELACIÓN………………………………...……….27 X.lV. MODELO RELACIONAL………………………………………….………28 X.V. DICCIONARIO DE DATOS……………………………………………….29 XI. RESULTADOS OBTENIDOS………………………………………….……..……41 XII. CONCLUSIONES Y RECOMENDACIONES……………………….……..…….42 XIII. ANEXOS XIV. BIBLIOGRAFÍA 4 I. Introducción El documento que se presenta a continuación trata sobre la reingeniería de base de datos en la Iglesia Unidad Cristiana de Querétaro A.R., realizando el respectivo análisis, creación e implementación de bases de datos. La cual ayudará en la administración y seguimiento de los procesos realizados, para que estos sean más eficientes y precisos. En la Iglesia Unidad Cristiana de Querétaro A.R., se detectaron deficiencias en las bases de datos que se utilizan para la administración y control de la información. Por tal motivo se ha decidido realizar el proyecto Reingeniería de base de datos. Para esto se lleva a cabo la recopilación de información, para realizar el análisis y obtener la identificación de las entidades principales. Posteriormente se realiza la propuesta del nuevo diseño de la base de datos mediante un modelo Entidad-Relación y Relacional. Al finalizar el diseño se genera el script para la implementación de la nueva base de datos. 5 II. Antecedentes La Iglesia Unidad Cristiana de Querétaro y su crecimiento dentro del departamento de TI han contribuido exitosamente con el avance hacia las metas que se han establecido. Actualmente se comenzaron a realizar las revisiones para continuar con la escalabilidad del departamento en sus diferentes áreas, y nos encontramos con la falta de integridad en los datos que se manejan, esto debido a que los datos se encuentran dispersos y duplicados en distintos tipos de archivos, como lo son hojas de cálculo o distintas bases de datos y físicamente en documentos escritos. Una base de datos (cuya abreviatura es BD) es una entidad en la cual se pueden almacenar datos de manera estructurada, con la menor redundancia posible. Las ventajas de usar una base de datos bien estructurada son las siguientes: Es Compacto: No hacen falta archivos de papeles que pudieran ocupar mucho espacio. Es Rápido: La máquina puede obtener y modificar datos con mucha mayor velocidad que un ser humano. Así es posible satisfacer con rapidez consultas de casos particulares, del momento, sin necesidad de búsquedas visuales o manuales que refieren mucho tiempo. Es menos Laborioso: Se elimina gran parte del tedio de manera manual. Las tareas mecánicas siempre serán mejor realizadas por las máquinas. 6 Es Actual: Se dispone en cualquier momento de información precisa y al día. Cómoda: Al tener la información en un mismo sitio, ahorraremos tiempo y trabajo En estos casos el área de Base de Datos es de vital importancia ya que mediante su correcta implementación los datos son almacenados y sirven como fuente de información para los sitios web además de ser esenciales en la toma de decisiones de gran importancia dentro de la Querétaro. 7 Iglesia Unidad Cristiana de III. Justificación Debido a la creciente necesidad de que la Iglesia Unidad Cristiana de Querétaro utilice la tecnología en sus principales procesos de negocio, y con el objetivo de que estas tecnologías apoyen la toma de decisiones, es indispensable la implementación de una base de datos, para gestionar de manera óptima la información manejada en los principales procesos de negocio que tiene la empresa. El principal motivo de este proyecto, tiene que ver con la inclusión de la tecnología primeramente como soporte a los procesos de negocio que se vienen llevando a cabo en la empresa, más precisamente en la Iglesia Unidad Cristiana de Querétaro, para el manejo de sus distintas áreas operativas. Lo que se busca es obtener óptimos resultados, a través de una administración correcta de su información, esto es, que la empresa utilice la tecnología como su primer recurso fundamental para poder realizar todos los procesos involucrados, en un ambiente sistematizado, el cual sea totalmente confiable y oportuno para cuando se necesite extraer información del mismo. 8 IV. Objetivos Analizar y re-diseñar la base de datos de la Iglesia Unidad Cristiana de Querétaro A.R. para mantener íntegros los datos de la misma y poder utilizarlos en la toma de decisiones. IV.I Objetivos específicos Análisis de requerimientos. Se establece contacto con las áreas involucradas, para identificar las funciones, flujo, estructura y la asociación de la información necesaria. Planeación de la nueva base de datos. En base al análisis se fijan metas y se estipulan pasos para llegar a ellas. A estas metas se les asignan tiempos para su cumplimiento. Diseño conceptual. Ya con la planeación realiza y en base al análisis de requisitos se comienza con el diseño conceptual, este consiste en crear el diagrama EntidadRelación el cual representa la realidad a través de un esquema gráfico. Diseño lógico. En esta etapa se genera la transformación del esquema Entidad-Relación a un esquema Relacional, representado en forma de tablas y relaciones. 9 Diseño físico. Este proceso da como resultado un esquema físico de la base de datos, el cual se genera a través de un Sistema Gestor de Base de Datos específico, el cual es elegido en la planeación. 10 V. Alcance Se busca producir un cambio en la situación encontrada de la dispersión de la información de la Unidad Cristiana de Querétaro, lo cual dificulta el manejo efectivo de esa información. Siendo necesario reestructurar la base de datos; levantar, actualizar e incorporar la información necesaria. En este proyecto se propone realizar durante el período del 18 de Mayo al viernes 21 de Agosto del 20015, desarrollando las siguientes fases: 1. Fase de preparación Esta fase se desarrollará durante el periodo del 18 de Mayo al 5 de Junio del 2015. En la cual se realizará el plan de trabajo, así como la documentación de las bases de datos existentes. 2. Fase de análisis Esta fase se desarrollara durante el periodo del 8 de Junio al 26 de Junio del 2015. En esta fase se realizará el análisis de los requerimientos para captar la información adecuada para el diseño de la base de datos. 3. Fase de diseño conceptual Esta fase se desarrollará durante el periodo del 24 de Junio al 9 de Julio del 2015. Después del análisis en esta fase se diseñará el diagrama entidad relación. 11 4. Fase de diseño lógico Esta fase se desarrollará durante el periodo del 10 de Julio al 27 de Julio del 2015. En base al diagrama relacional se diseñara el diagrama entidadrelación. 5. Fase de diseño físico Esta fase se desarrollara durante el periodo del 28 de Julio al 21 de Agosto del 2015. En la última fase se implementará el diseño de la base de datos obtenida mediante el modelo entidad-relación mediante el DBMS para su creación y administración. 12 VI. PROBABILIDAD VALOR NUMÉRICO Muy Improbable Relativamente Probable Probable Muy Probable Casi Certeza 0.1 0.3 0.5 0.7 0.9 Análisis de riesgos IMPACTO VALOR NUMÉRICO Muy Bajo Bajo Moderado Alto Muy Alto 0.05 0.10 0.20 0.40 0.80 Tabla 1. Probabilidad CÓDIGO DEL RIESGO DESCRIPCIÓN CAUSA RAÍZ TRIGGER DEL ENTREGABLE AFECTADO ESTIMACIÓN DE PROBABILIDAD S R001 R002 Modificación del Cronograma Falta de información y de análisis Alteración de actividades Errores durante la recopilación de información Retraso en el desarrollo del proyecto Retraso en el desarrollo del proyecto DE RIESGO PROBABILIDAD IMPACTO mayor a 0.50 menor a menor a menor a menor a X 0.50 0.30 0.10 0.05 Tabla 2. Tipo de Riesgo S RIESGO TIPO Muy Alto Alto Moderado Bajo Muy Bajo Cronograma de actividades Proyecto completo 13 0.3 0.3 OBJETIVO AFECTADO ESTIMACIÓN DE IMPACTO Alcance 0.10 0.20 Tiempo Costo Calidad 0.20 TOTAL PROBABILIDAD X IMPACTO Alcance Tiempo 0.20 Costo 0.40 Calidad TOTAL PROBABILIDAD X IMPACTO PROB X TIPO DE IMPACTO RIESGO .03 .06 .06 Moderado .15 .06 .12 0.18 Moderado R003 R004 R005 R006 R007 Modificación en los requerimientos Mal funcionamiento Cambio de requerimientos Diseño Nuevo análisis del ineficiente de la Todo el proyecto proyecto BD Solicitud de adicionales Identificación de no nuevos contemplados en el entregables alcance Incumplimiento de los entregables Desaprobación de los informes mensuales o informe final Diagramas E/R, Relacional y Nuevo análisis del proyecto Diccionario de Datos Falta de coordinación y comunicación El informe no está de acuerdo a los términos de referencia del proyecto. Modificación cronograma de actividades y entregables Detección de pequeños incumplimientos o signos de no calidad de servicio Revisión y actualización de los informes Todo el proyecto Documento de acuerdo a la fase 0.3 0.3 0.5 0.1 Alcance 0.10 0.20 Tiempo Costo 0.10 Calidad TOTAL PROBABILIDAD X IMPACTO Alcance Tiempo 0.20 Costo 0.20 Calidad TOTAL PROBABILIDAD X IMPACTO Alcance 0.40 0.20 Tiempo Costo Calidad TOTAL PROBABILIDAD X IMPACTO Alcance Tiempo 0.30 .03 .06 .06 Moderado .12 .06 .06 Moderado 0.12 .2 .1 Moderado 0.3 Costo Muy Bajo Calidad TOTAL PROBABILIDAD X IMPACTO 0.03 Alcance Tiempo 0.20 .06 0.40 .12 Costo Informes 0.3 Calidad Moderado TOTAL PROBABILIDAD X IMPACTO Tabla 3. Tabla descripción de riesgo 14 0.18 VII. Fundamentación teórica A continuación se citan algunos conceptos que nos ayudan a conocer las bases para el desarrollo del proyecto. De acuerdo con el estudio de Edgar Frank Cood nos menciona lo siguiente: Una Base de Datos es una colección de archivos interrelacionados creados con un Sistema Manejador de Bases de Datos (DBMS). El contenido de una base se obtiene combinando datos de todas las diferentes fuentes en una organización, de tal manera que los datos estén disponibles para todos los usuarios y los datos redundantes pueden eliminarse o por lo menos minimizarse. Las bases de datos son conjuntos de datos pertenecientes a un mismo contexto y almacenados de forma sistemática para ser usados después; este conjunto de datos tiene que estar estructurado, no debe ser redundante, además su implementación debe ser accesible en tiempo real y la manipulación de los usuarios debe ser amigable. Las bases de datos proporcionan la infraestructura requerida para los sistemas de apoyo a la toma de decisiones y para los sistemas de información estratégicos, ya que éstos explotan la información contenida en las bases de datos de la organización para apoyar el proceso de toma de decisiones o para lograr ventajas competitivas. Una Base de Datos se conforma de cuatro componentes principales brevemente descritos a continuación: 15 Datos.- Deben recoger toda la información necesaria, sin que exista repetición de la misma dentro de la base. Hardware.- Es el soporte físico que permite almacenar la información de la DB. Software.- Permite interactuar con la base de datos de manera eficiente. Personal.- Las bases de datos son manipuladas por personal con diferentes perfiles, entre ellos podemos mencionar: o Administradores del DBMS (DBA por sus siglas en inglés). Encargado del control y manejo de la Base. o Administradores de la base (DBO por sus siglas en inglés). Encargado de diseñar la base de datos, definir las estructuras de almacenamiento y métodos de acceso (tablas), modificar el diseño y organización física de la Base y una de las más importantes es el otorgar permisos de acceso a usuarios dentro de la base. o Programadores de aplicaciones o Desarrolladores. Diseñan y programan las aplicaciones necesarias para la utilización de las bases de datos. o Usuarios. Aquellos que utilizan el sistema de base de datos por medio de una interfaz gráfica e interactúan con los mismos dependiendo de los permisos que le hayan sido otorgados. 16 MySQL Es un sistema de gestión de bases de datos relacional, fue creada por la empresa sueca MySQL AB, la cual tiene el copyright del código fuente del servidor SQL, así como también de la marca. MySQL es un software de código abierto, licenciado bajo la GPL (General Public License), aunque MySQL AB distribuye una versión comercial, en lo único que se diferencia de la versión libre, es en el soporte técnico que se ofrece, y la posibilidad de integrar este gestor en un software propietario, ya que de otra manera, se vulneraría la licencia GPL. El lenguaje de programación que utiliza MySQL es Structured Query Language (SQL) que fue desarrollado por IBM en 1981 y desde entonces es utilizado de forma generalizada en las bases de datos relacionales. Inicialmente, MySQL carecía de algunos elementos esenciales en las bases de datos relacionales, tales como integridad referencial y transacciones. A pesar de esto, atrajo a los desarrolladores de páginas web con contenido dinámico, debido a su simplicidad, de tal manera que los elementos faltantes fueron complementados por la vía de las aplicaciones que la utilizan. Poco a poco estos elementos faltantes, están siendo incorporados tanto por desarrolladores internos, como por desarrolladores de software libre. En las últimas versiones se pueden destacar las siguientes características principales: 17 El principal objetivo de MySQL es velocidad y robustez. Soporta gran cantidad de tipos de datos para las columnas. Gran portabilidad entre sistemas, puede trabajar en distintas plataformas y sistemas operativos. Cada base de datos cuenta con 3 archivos: Uno de estructura, uno de datos y uno de índice y soporta hasta 32 índices por tabla. Aprovecha la potencia de sistemas multiproceso, gracias a su implementación multi hilo. Flexible sistema de contraseñas (passwords) y gestión de usuarios, con un muy buen nivel de seguridad en los datos. El servidor soporta mensajes de error en distintas lenguas MySQL Workbench Es una herramienta que permite modelar diagramas de entidad-relación para bases de datos MySQL. Puede utilizarse para diseñar el esquema de una base de datos nueva, documentar una ya existente o realizar una migración compleja. La aplicación elabora una representación visual de las tablas, vistas, procedimientos almacenados y claves extranjeras de la base de datos. Además, es capaz de sincronizar el modelo en desarrollo con la base de datos real. MySQL Workbench también puede generar el script necesario para crear la base de datos que se ha dibujado en el esquema. 18 phpMyAdmin phpMyAdmin es un software de código abierto, diseñado para manejar la administración y gestión de bases de datos MySQL a través de una interfaz gráfica de usuario. Escrito en PHP, phpMyAdmin se ha convertido en una de las más populares herramientas basadas en web de gestión de MySQL. phpMyAdmin viene con una documentación detallada y está siendo apoyado por un gran multiidioma de la comunidad. phpMyAdmin es cada vez mayor lista de características soporta todas las operaciones de uso común tales como la navegación, pasando, crear, modificar las bases de datos MySQL, las tablas, campos e índices. Además, phpMyAdmin le permite administrar usuarios MySQL y privilegios de usuario. Otra característica común es phpMyAdmin su función de importación. Con phpMyAdmin, importar base de datos MySQL de copia de seguridad es fácil y se puede importar un volcado SQL o CSV con unos clics del ratón. También, usted puede exportar su base de datos en formato CSV, SQL, XML, Excel y otros. DIA Dia es una aplicación informática de propósito general para la creación de diagramas. Está concebido de forma modular, con diferentes paquetes de formas para diferentes necesidades. Dia está diseñado como un sustituto de la aplicación comercial Visio de Microsoft. Se puede utilizar para dibujar diferentes tipos de diagramas. Actualmente se 19 incluyen diagramas entidad-relación, diagramas UML, diagramas de flujo, diagramas de redes, diagramas de circuitos eléctricos, etc. El formato para leer y almacenar gráficos es XML (eXtensible Markup Language). Puede producir salida en los formatos EPS, SVG y PNG. 20 VIII. Plan de actividad Imagen 1. Plan de Actividades 21 IX. Recursos materiales y humanos Recursos Materiales Nombre PC Impresora MySQL Workbench DIA PHPMyAdmin MS Office Descripción PC con 8 Gb de memoria RAM, 500 Gb de disco duro, procesador Intel core i5. Impresora láser para impresión de documentación. Software para generación diseño lógico de base de datos. (Diagrama E/R) Software para generación de diseño conceptual de base de datos. (Diagrama relacional) Software para la creación y administración de la base de datos. Paquetería de Office para documentación del proyecto. Cantidad Costo 1 MXN $ 8000.00 1 MXN $ 1500.00 1 Software Libre 1 Software Libre 1 Incluido en Hosting 1 MXN $850.00 (anualidad) Tabla 4. Recursos Materiales 22 Recursos Humanos Nombre Luis Fernando Breña De Jesús Rol Analista, programador Categoría Ing. Iván Israel Morales Valencia Analista Ing. Grecia Melina Méndez Malagón Líder de proyecto Ing. Tabla 5. Recursos Humanos 23 Responsabilidades Responsable del análisis, planeación, diseño y programación de bases de base de datos. Análisis y diseño de diagramas UML para desarrollo de base de datos. Revisión y aceptación del proyecto. X. X.I Desarrollo del proyecto Identificación del problema La Iglesia Unidad Cristiana de Querétaro actualmente maneja 3 sistemas: Administración, Eventos y UCKids; Los cuales funcionan en bases de datos distintas que no están documentadas. Después del análisis se definió que se requiere diseñar una base de datos única que maneje los 3 sistemas y que pueda ser escalable en caso de ser necesario. X.II Recopilación de información Para esta base de datos se manejan 3 áreas: Administración UC UCKids Congresos Para comenzar el proyecto se realizó la documentación de las bases de datos existentes. Después se procede a realizar la identificación de entidades principales por área, las cuales son las siguientes: Entidades Generales o Persona 24 o Dirección Entidades Administración UC o Miembro o Usuario o TipoUsuario o Departamento o Requisición o Cotización o Archivo o Proveedor o Gastos o TipoGastos o Ingresos o TipoIngresos Entidades UCKids o Niño o Tutor o Activo o Grupo 25 o Entrega o Totales Entidades Congresos o Evento o Taller o Asistente o Registro 26 X.III Modelo Entidad-Relación A continuación se muestra el diagrama Entidad-Relación obtenido del análisis: Imagen 2. Modelo Entidad-Relación 27 X.IV Modelo Relacional A continuación se muestra el diagrama Relacional obetnido del analisis: Imagen 3. Modelo Relacional 28 X.V Diccionario de datos Después de realizar el diseño conceptual mediante el diagrama relacional se procede a realizar el diccionario de datos que refleja las propiedades de las tablas obtenidas. Anexo 1. Activo Columna Tipo PK NN FK id_activo Int X X Clave Varchar(45) X Recoge Varchar(45) X Fk_niño Int X x Fk_grupo Int X x Fecha Date x UQ AI Default Comentario Default Comentario X Tabla 6. Activo Archivo Columna Tipo PK NN Id_archivo Int x X Nom_archivo Varchar(45) FK UQ AI X x Tabla 7. Archivo 29 Área de servicio Columna Tipo PK NN Id_areaservicio Int x X Nom_areaservicio Varchar(45) FK UQ AI Default Comentario Default Comentario Default Comentario X X Tabla 8. .AreaServicio Asistente Columna Tipo PK NN Id_asistente Int x X Iglesia Varchar(45) FK UQ AI x Tabla 9 .Asistente Asistente-Evento Columna Tipo Fk_asistente PK NN FK Int x X Fk_evento Int X X Fecha Date X UQ AI Tabla 10. Asistente-Evento 30 Asistente-Taller Columna Tipo Fk_asistente PK NN FK Int X x Fk_taller Int X X fecha Date x UQ AI Default Comentario Default Comentario Tabla 11. Asistente-Taller Cotización Columna Tipo PK NN Id_cotizacion Iny x X Fec_pago Date Fec_alta Date X Cantidad Int X Fk_proveedor Int X Fk_archivo Int FK UQ AI x X X Tabla 12. Cotización 31 Departamento Columna Tipo PK NN Id_departamento Int x X Nom_depto Varchar(45) X Fecha Date X FK UQ AI Default Comentario Default Comentario x Tabla 13. Departamento Dirección Columna Tipo PK NN Id_direccion Int X X Calle Varchar(45) Num_int Int Num_ext Int Colonia Varchar(45) Municipio Varchar(45) Estado Varchar(45) FK UQ AI X Tabla 14. Dirección 32 Entrega Columna Tipo PK NN Id_entrega Int X X Fec_entrega Date X Fk_activo Int X FK UQ AI Default Comentario Default Comentario X X Tabla 15. Entrega Evento Columna Tipo PK NN Id_evento Int X X Nom_evento Varchar(45) X Fec_evento Date X Fk_usuario Int X FK UQ AI X X Tabla 16. Evento 33 Gastos Columna Tipo PK NN FK Id_gastos Int X X Nom_gasto Varchar(45) X Total Doublé X Info Varchar(45) Fec_alta Date X Fk_usuario Int X X Fk_tipogasto Int X X UQ AI Default Comentario Default Comentario X Tabla 17. Gastos Grupo Columna Tipo PK NN Id_grupo Int X X Nom_grupo Varchar(45) Descripcion Varchar(100) FK UQ AI X X Tabla 18. Grupo 34 Ingresos Columna Tipo PK NN FK Id_ingreso Int X X Fk_depto Int X X Fk_usuario Int X X UQ AI Default Comentario Default Comentario X Tabla. Ingresos Niño Columna Tipo PK NN FK Id_niño Int X X Alergias Varchar(45) Extras Varchar(45) Fk_persona Int X X Fk_tutor Int X X UQ AI X Tabla 19. Niño 35 Persona Columna Tipo PK NN Id_persona Int X X Nombre Varchar(45) Ap_paterno Varchar(45) Ap_materno Varchar(45) Fec_nac date Email Varchar(45) Genero Varchar(20) Fk_dir int FK UQ AI Default Comentario Default Comentario X X X X X Tabla 20. Persona Proveedor Columna Tipo PK NN Id_proveedor Int x X Nom_proveedor Varchar(45) X Rfc Varchar(45) X Razon_social Varchar(45) Fec_alta Date Nom_contacto Varchar(45) FK UQ AI X X 36 telefono Int banco Varchar(45) clave Varchar(45) Tabla 21. Proveedor Requisición Columna Tipo PK NN Id_requisicion Int X X Nom_producto Varchar(45) Descripcion Varchar(45) Info Varchar(45) Fk_depto Int Fk_usuario Int X Fec_alta Date X Fk_cotizacionaprobada Int FK UQ AI X X X X X Tabla 22. Requisición 37 Default Comentario Requisicion-Cotizacion Columna Tipo Fk_requisicion Fk_cotizacion PK NN FK Int X X Int x x UQ AI Default Comentario Tabla 23. Requisición-Cotización Taller Columna Tipo PK NN Id_taller Int X X Nom_taller Varchar(45) X Fk_avento Int X FK UQ AI Default Comentario Default Comentario X X Tabla 24. Taller TipoGasto Columna Tipo PK NN Id_tipogasto Int X X Nom_tipo Varchar(45) FK UQ AI X Tabla 25. Tipo de Gasto 38 Tutor Columna Tipo PK NN Id_tutor Int X X Fk_persona Varchar(45) X FK UQ AI Default Comentario AI Default Comentario X Tabla 26. Tutor Usuario Columna Tipo PK NN FK Id_usuario Int X X Nom_usuario Varchar(45) X Password Varchar(45) X Fk_miembro Int X X Fk_tipousuario Int X X UQ X Tabla 27. Usuario 39 Miembro Columna Tipo PK NN Id_miembro Int X X Fec_alta Date Fk_persona Int Fk_areaservicio Int X Fk_depto Int X X FK UQ AI X X Tabla 28. Miembro 40 Default Comentario XI. Resultados obtenidos Al término de este proyecto se obtuvo como resultado la base de datos funcional y exitosa dentro de la Iglesia Unidad Cristiana de Querétaro A.R., cumpliendo los objetivos planteados al principio del mismo. Este proyecto generó un impacto en los sistemas que se manejan en la Iglesia Unidad Cristiana, los cuales son: UC Kids, Administración y Eventos, estos sistemas manejan una gran cantidad de datos que serán almacenados en la nueva base de datos desarrollada. 41 XII. Conclusiones y recomendaciones En este proyecto hemos podido observar el método de aplicación de análisis detallado para obtener las diferentes entidades y relaciones de la base de datos y posteriormente comenzar con el nuevo diseño e implementación de la misma, mediante el uso de los diferentes programas para la creación de una base de datos como es el caso de MySQL Workbench, Día, PhpMyAdmin. Después de realizar las pruebas a la base de datos, el éxito dependería del buen uso de la misma, conociendo sus funciones específicas y alcances. Durante el periodo de este proyecto he logrado adquirir nuevos conocimientos técnicos para el desarrollo de base de datos y administración de proyectos que me permiten crecer de manera profesional, además, como persona he aprendido a trabajar en equipo, administrar el tiempo de mis actividades y expresarme de una manera más efectiva. Para darle seguimiento a la base de datos ya establecida se recomienda que en caso de surgir alguna modificación a lo ya determinado se tenga en cuenta lo documentado en este proyecto para una correcta implementación cumpliendo con la metodología preestablecida. 42 Xlll. Anexos Anexo 1. Diseño Lógico de la Base de Datos. Imagen 4. Diseño Lógico Anexo 2. Script de la Base de Datos. -- MySQL Workbench Forward Engineering -- ------------------------------------------------------ Schema UC -- ----------------------------------------------------CREATE SCHEMA IF NOT EXISTS `UC` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; USE `UC` ; -- ------------------------------------------------------ Table `UC`.`Direccion` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `UC`.`Direccion` ( `idDireccion` INT NOT NULL AUTO_INCREMENT, `calle` VARCHAR(45) NULL, `num_int` INT NULL, `num_ext` INT NULL, `colonia` VARCHAR(45) NULL, `municipio` VARCHAR(45) NULL, `estado` VARCHAR(45) NULL, `cp` VARCHAR(45) NULL, PRIMARY KEY (`idDireccion`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Persona` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Persona` ( `idPersona` INT NOT NULL AUTO_INCREMENT, `nombre` VARCHAR(45) NOT NULL, `ap_materno` VARCHAR(45) NULL, `ap_paterno` VARCHAR(45) NULL, `fec_nac` DATE NOT NULL, `email` VARCHAR(45) NULL, `genero` VARCHAR(45) NOT NULL, `fkDireccion` INT NOT NULL, `tel` INT NULL, `tel2` INT NULL, PRIMARY KEY (`idPersona`), INDEX `fk_Persona_Direccion_idx` (`fkDireccion` ASC), CONSTRAINT `fk_Persona_Direccion` FOREIGN KEY (`fkDireccion`) REFERENCES `UC`.`Direccion` (`idDireccion`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`AreaServicio` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`AreaServicio` ( `idAreaServicio` INT NOT NULL, `nombre_area` VARCHAR(45) NULL, PRIMARY KEY (`idAreaServicio`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Departamento` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Departamento` ( `idDepartamento` INT NOT NULL, `nom_depto` VARCHAR(45) NULL, `fecha` DATE NULL, PRIMARY KEY (`idDepartamento`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`miembro` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`miembro` ( `idmiembro` INT NOT NULL AUTO_INCREMENT, `fec_alta` DATE NULL, `fkPersona` INT NOT NULL, `fkAreaServicio` INT NOT NULL, `fkDepartamento` INT NOT NULL, PRIMARY KEY (`idmiembro`), INDEX `fk_miembro_Persona1_idx` (`fkPersona` ASC), INDEX `fk_miembro_AreaServicio1_idx` (`fkAreaServicio` ASC), INDEX `fk_miembro_Departamento1_idx` (`fkDepartamento` ASC), CONSTRAINT `fk_miembro_Persona1` FOREIGN KEY (`fkPersona`) REFERENCES `UC`.`Persona` (`idPersona`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_miembro_AreaServicio1` FOREIGN KEY (`fkAreaServicio`) REFERENCES `UC`.`AreaServicio` (`idAreaServicio`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_miembro_Departamento1` FOREIGN KEY (`fkDepartamento`) REFERENCES `UC`.`Departamento` (`idDepartamento`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`TipoUsuario` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`TipoUsuario` ( `idTipoUsuario` INT NOT NULL AUTO_INCREMENT, `nom_tipo` VARCHAR(45) NOT NULL, PRIMARY KEY (`idTipoUsuario`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Area` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Area` ( `idArea` INT NOT NULL AUTO_INCREMENT, `nombreArea` VARCHAR(45) NULL, PRIMARY KEY (`idArea`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Usuario` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Usuario` ( `idUsuario` INT NOT NULL AUTO_INCREMENT, `nom_usuario` VARCHAR(45) NOT NULL, `password` VARCHAR(45) NOT NULL, `fkTipoUsuario` INT NOT NULL, `fkArea` INT NOT NULL, PRIMARY KEY (`idUsuario`), INDEX `fk_Usuario_TipoUsuario1_idx` (`fkTipoUsuario` ASC), INDEX `fk_Usuario_Area1_idx` (`fkArea` ASC), CONSTRAINT `fk_Usuario_TipoUsuario1` FOREIGN KEY (`fkTipoUsuario`) REFERENCES `UC`.`TipoUsuario` (`idTipoUsuario`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Usuario_Area1` FOREIGN KEY (`fkArea`) REFERENCES `UC`.`Area` (`idArea`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Proveedor` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Proveedor` ( `idProveedor` INT NOT NULL, `nom_prov` VARCHAR(45) NULL, `rfc` VARCHAR(45) NULL, `razon_social` VARCHAR(45) NULL, `fec_alta` DATE NULL, `nom_contacto` VARCHAR(45) NULL, `telefono` VARCHAR(45) NULL, `banco` VARCHAR(45) NULL, `clave` VARCHAR(45) NULL, PRIMARY KEY (`idProveedor`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Archivo` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Archivo` ( `idArchivo` INT NOT NULL, `nom_archivo` VARCHAR(45) NULL, PRIMARY KEY (`idArchivo`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Cotizacion` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Cotizacion` ( `idCotizacion` INT NOT NULL, `fec_pago` DATE NULL, `fec_alta` DATE NULL, `cantidad` INT NULL, `fkProveedor` INT NOT NULL, `fkArchivo` INT NOT NULL, PRIMARY KEY (`idCotizacion`), INDEX `fk_Cotizacion_Proveedor1_idx` (`fkProveedor` ASC), INDEX `fk_Cotizacion_Archivo1_idx` (`fkArchivo` ASC), CONSTRAINT `fk_Cotizacion_Proveedor1` FOREIGN KEY (`fkProveedor`) REFERENCES `UC`.`Proveedor` (`idProveedor`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Cotizacion_Archivo1` FOREIGN KEY (`fkArchivo`) REFERENCES `UC`.`Archivo` (`idArchivo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Requisicion` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Requisicion` ( `idRequisicion` INT NOT NULL, `nom_prod` VARCHAR(45) NOT NULL, `descripcion` VARCHAR(45) NULL, `info` VARCHAR(45) NULL, `fkDepartamento` INT NOT NULL, `fkUsuarioResponsable` INT NOT NULL, `fecha` DATE NULL, `fkCotizacionAprobada` INT NOT NULL, PRIMARY KEY (`idRequisicion`), INDEX `fk_Requisicion_Departamento1_idx` (`fkDepartamento` ASC), INDEX `fk_Requisicion_Usuario1_idx` (`fkUsuarioResponsable` ASC), INDEX `fk_Requisicion_Cotizacion1_idx` (`fkCotizacionAprobada` ASC), CONSTRAINT `fk_Requisicion_Departamento1` FOREIGN KEY (`fkDepartamento`) REFERENCES `UC`.`Departamento` (`idDepartamento`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Requisicion_Usuario1` FOREIGN KEY (`fkUsuarioResponsable`) REFERENCES `UC`.`Usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Requisicion_Cotizacion1` FOREIGN KEY (`fkCotizacionAprobada`) REFERENCES `UC`.`Cotizacion` (`idCotizacion`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Requisicion_has_Cotizacion` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Requisicion_has_Cotizacion` ( `Requisicion_idRequisicion` INT NOT NULL, `Cotizacion_idCotizacion` INT NOT NULL, PRIMARY KEY (`Requisicion_idRequisicion`, `Cotizacion_idCotizacion`), INDEX `fk_Requisicion_has_Cotizacion_Cotizacion1_idx` (`Cotizacion_idCotizacion` ASC), INDEX `fk_Requisicion_has_Cotizacion_Requisicion1_idx` (`Requisicion_idRequisicion` ASC), CONSTRAINT `fk_Requisicion_has_Cotizacion_Requisicion1` FOREIGN KEY (`Requisicion_idRequisicion`) REFERENCES `UC`.`Requisicion` (`idRequisicion`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Requisicion_has_Cotizacion_Cotizacion1` FOREIGN KEY (`Cotizacion_idCotizacion`) REFERENCES `UC`.`Cotizacion` (`idCotizacion`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `UC`.`CategoriaGasto` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`CategoriaGasto` ( `idCategoriaGasto` INT NOT NULL, `nom_categoriagasto` VARCHAR(45) NULL, PRIMARY KEY (`idCategoriaGasto`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Gastos` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Gastos` ( `idGastos` INT NOT NULL, `nom_gasto` VARCHAR(45) NULL, `total` DOUBLE NULL, `info` VARCHAR(45) NULL, `fec_alta` DATE NULL, `fkUsuarioResponsable` INT NOT NULL, `fkTipoGasto` INT NOT NULL, PRIMARY KEY (`idGastos`), INDEX `fk_Gastos_Usuario1_idx` (`fkUsuarioResponsable` ASC), INDEX `fk_Gastos_CategoriaGasto1_idx` (`fkTipoGasto` ASC), CONSTRAINT `fk_Gastos_Usuario1` FOREIGN KEY (`fkUsuarioResponsable`) REFERENCES `UC`.`Usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Gastos_CategoriaGasto1` FOREIGN KEY (`fkTipoGasto`) REFERENCES `UC`.`CategoriaGasto` (`idCategoriaGasto`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`CategoriaIngreso` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`CategoriaIngreso` ( `idCategoriaIngreso` INT NOT NULL, `nombre_categoriaingreso` VARCHAR(45) NULL, PRIMARY KEY (`idCategoriaIngreso`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Ingresos` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Ingresos` ( `idIngresos` INT NOT NULL, `fkDepartamento` INT NOT NULL, `fkUsuarioResponsable` INT NOT NULL, `fkCategoriaIngreso` INT NOT NULL, `reunion` VARCHAR(45) NULL, PRIMARY KEY (`idIngresos`), INDEX `fk_Ingresos_Departamento1_idx` (`fkDepartamento` ASC), INDEX `fk_Ingresos_Usuario1_idx` (`fkUsuarioResponsable` ASC), INDEX `fk_Ingresos_CategoriaIngreso1_idx` (`fkCategoriaIngreso` ASC), CONSTRAINT `fk_Ingresos_Departamento1` FOREIGN KEY (`fkDepartamento`) REFERENCES `UC`.`Departamento` (`idDepartamento`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Ingresos_Usuario1` FOREIGN KEY (`fkUsuarioResponsable`) REFERENCES `UC`.`Usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Ingresos_CategoriaIngreso1` FOREIGN KEY (`fkCategoriaIngreso`) REFERENCES `UC`.`CategoriaIngreso` (`idCategoriaIngreso`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Evento` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Evento` ( `idEvento` INT NOT NULL, `nom_evento` VARCHAR(45) NULL, `fec_evento` VARCHAR(45) NULL, `fkUsuario` INT NOT NULL, PRIMARY KEY (`idEvento`), INDEX `fk_Evento_Usuario1_idx` (`fkUsuario` ASC), CONSTRAINT `fk_Evento_Usuario1` FOREIGN KEY (`fkUsuario`) REFERENCES `UC`.`Usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Tutor` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Tutor` ( `idTutor` INT NOT NULL AUTO_INCREMENT, `fkPersona` INT NOT NULL, PRIMARY KEY (`idTutor`), INDEX `fk_Tutor_Persona1_idx` (`fkPersona` ASC), CONSTRAINT `fk_Tutor_Persona1` FOREIGN KEY (`fkPersona`) REFERENCES `UC`.`Persona` (`idPersona`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Niño` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Niño` ( `id_Niño` INT NOT NULL AUTO_INCREMENT, `alergias` VARCHAR(45) NULL, `extras` VARCHAR(45) NULL, `fkPersona` INT NOT NULL, `fkTutor` INT NOT NULL, PRIMARY KEY (`id_Niño`), INDEX `fk_Niño_Persona1_idx` (`fkPersona` ASC), INDEX `fk_Niño_Tutor1_idx` (`fkTutor` ASC), CONSTRAINT `fk_Niño_Persona1` FOREIGN KEY (`fkPersona`) REFERENCES `UC`.`Persona` (`idPersona`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Niño_Tutor1` FOREIGN KEY (`fkTutor`) REFERENCES `UC`.`Tutor` (`idTutor`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`totales` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`totales` ( `idtotales` INT NOT NULL, `fecha` VARCHAR(45) NULL, `no_niños` VARCHAR(45) NULL, `ofrenda` VARCHAR(45) NULL, `gasto` VARCHAR(45) NULL, `diferencia` VARCHAR(45) NULL, PRIMARY KEY (`idtotales`)) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Grupo` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Grupo` ( `idGrupo` INT NOT NULL AUTO_INCREMENT, `nom_grupo` VARCHAR(45) NOT NULL, `descripcion` VARCHAR(45) NULL, `totales_idtotales` INT NOT NULL, PRIMARY KEY (`idGrupo`), INDEX `fk_Grupo_totales1_idx` (`totales_idtotales` ASC), CONSTRAINT `fk_Grupo_totales1` FOREIGN KEY (`totales_idtotales`) REFERENCES `UC`.`totales` (`idtotales`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Activo` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Activo` ( `idActivo` INT NOT NULL AUTO_INCREMENT, `clave` VARCHAR(45) NOT NULL, `recoge` VARCHAR(45) NOT NULL, `fkNiño` INT NOT NULL, `fkGrupo` INT NOT NULL, `fecha` DATE NOT NULL, `Cuidado` INT NULL, PRIMARY KEY (`idActivo`), INDEX `fk_Activo_Niño1_idx` (`fkNiño` ASC), INDEX `fk_Activo_Grupo1_idx` (`fkGrupo` ASC), CONSTRAINT `fk_Activo_Niño1` FOREIGN KEY (`fkNiño`) REFERENCES `UC`.`Niño` (`id_Niño`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Activo_Grupo1` FOREIGN KEY (`fkGrupo`) REFERENCES `UC`.`Grupo` (`idGrupo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Entrega` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Entrega` ( `idEntrega` INT NOT NULL AUTO_INCREMENT, `fec_entrega` DATE NOT NULL, `fkActivo` INT NOT NULL, `fkNiño` INT NOT NULL, `fkUsuario` INT NOT NULL, PRIMARY KEY (`idEntrega`), INDEX `fk_Entrega_Activo1_idx` (`fkActivo` ASC), INDEX `fk_Entrega_Niño1_idx` (`fkNiño` ASC), INDEX `fk_Entrega_Usuario1_idx` (`fkUsuario` ASC), CONSTRAINT `fk_Entrega_Activo1` FOREIGN KEY (`fkActivo`) REFERENCES `UC`.`Activo` (`idActivo`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Entrega_Niño1` FOREIGN KEY (`fkNiño`) REFERENCES `UC`.`Niño` (`id_Niño`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Entrega_Usuario1` FOREIGN KEY (`fkUsuario`) REFERENCES `UC`.`Usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Asistente` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Asistente` ( `idAsistente` INT NOT NULL AUTO_INCREMENT, `iglesia` VARCHAR(45) NULL, `fkPersona` INT NOT NULL, `area` VARCHAR(45) NULL, PRIMARY KEY (`idAsistente`), INDEX `fk_Asistente_Persona1_idx` (`fkPersona` ASC), CONSTRAINT `fk_Asistente_Persona1` FOREIGN KEY (`fkPersona`) REFERENCES `UC`.`Persona` (`idPersona`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Taller` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Taller` ( `idTaller` INT NOT NULL AUTO_INCREMENT, `nom_taller` VARCHAR(45) NULL, `fkEvento` INT NOT NULL, PRIMARY KEY (`idTaller`), INDEX `fk_Taller_Evento1_idx` (`fkEvento` ASC), CONSTRAINT `fk_Taller_Evento1` FOREIGN KEY (`fkEvento`) REFERENCES `UC`.`Evento` (`idEvento`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`ReqAprobadas` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`ReqAprobadas` ( `idReqAprobadas` INT NOT NULL, `fkRequisicion` INT NOT NULL, `fkCotizacionAprobada` INT NOT NULL, PRIMARY KEY (`idReqAprobadas`), INDEX `fk_ReqAprobadas_Requisicion1_idx` (`fkRequisicion` ASC), INDEX `fk_ReqAprobadas_Cotizacion1_idx` (`fkCotizacionAprobada` ASC), CONSTRAINT `fk_ReqAprobadas_Requisicion1` FOREIGN KEY (`fkRequisicion`) REFERENCES `UC`.`Requisicion` (`idRequisicion`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_ReqAprobadas_Cotizacion1` FOREIGN KEY (`fkCotizacionAprobada`) REFERENCES `UC`.`Cotizacion` (`idCotizacion`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Codigo` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Codigo` ( `codigo` INT NOT NULL, `status` INT NULL, `fkEvento` INT NOT NULL, PRIMARY KEY (`codigo`), INDEX `fk_Codigo_Evento1_idx` (`fkEvento` ASC), CONSTRAINT `fk_Codigo_Evento1` FOREIGN KEY (`fkEvento`) REFERENCES `UC`.`Evento` (`idEvento`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Asistente_has_Evento` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`Asistente_has_Evento` ( `fkAsistente` INT NOT NULL, `fkEvento` INT NOT NULL, `codigo` INT NOT NULL, PRIMARY KEY (`fkAsistente`, `fkEvento`), INDEX `fk_Asistente_has_Evento_Evento1_idx` (`fkEvento` ASC), INDEX `fk_Asistente_has_Evento_Asistente1_idx` (`fkAsistente` ASC), INDEX `fk_Asistente_has_Evento_Codigo1_idx` (`codigo` ASC), CONSTRAINT `fk_Asistente_has_Evento_Asistente1` FOREIGN KEY (`fkAsistente`) REFERENCES `UC`.`Asistente` (`idAsistente`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Asistente_has_Evento_Evento1` FOREIGN KEY (`fkEvento`) REFERENCES `UC`.`Evento` (`idEvento`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Asistente_has_Evento_Codigo1` FOREIGN KEY (`codigo`) REFERENCES `UC`.`Codigo` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`ActivoCongreso` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `UC`.`ActivoCongreso` ( `idActivoCongreso` INT NOT NULL, `id_asistente` INT NOT NULL, `pulsera` VARCHAR(45) NULL, PRIMARY KEY (`idActivoCongreso`), INDEX `fk_ActivoCongreso_Asistente_has_Evento1_idx` (`id_asistente` ASC), CONSTRAINT `fk_ActivoCongreso_Asistente_has_Evento1` FOREIGN KEY (`id_asistente`) REFERENCES `UC`.`Asistente_has_Evento` (`fkAsistente`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `UC`.`Taller_has_ActivoCongreso` -- --------------------------------------------------- CREATE TABLE IF NOT EXISTS `UC`.`Taller_has_ActivoCongreso` ( `fkTaller` INT NOT NULL, `fkActivoCongreso` INT NOT NULL, PRIMARY KEY (`fkTaller`, `fkActivoCongreso`), INDEX `fk_Taller_has_ActivoCongreso_ActivoCongreso1_idx` (`fkActivoCongreso` ASC), INDEX `fk_Taller_has_ActivoCongreso_Taller1_idx` (`fkTaller` ASC), CONSTRAINT `fk_Taller_has_ActivoCongreso_Taller1` FOREIGN KEY (`fkTaller`) REFERENCES `UC`.`Taller` (`idTaller`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_Taller_has_ActivoCongreso_ActivoCongreso1` FOREIGN KEY (`fkActivoCongreso`) REFERENCES `UC`.`ActivoCongreso` (`idActivoCongreso`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; XIV. Bibliografía Desconocido. (25-05-2007). Por qué utilizar bases de datos. 22-06-2015, de PBWORK Sitio web: http://docupo.pbworks.com/w/page/18009120/porque%utilizar%bases%de%datos Eduardo Rivera Salinas. (10-06-2014). Introducción Base de Datos. 22-06-2015, de CCM Sitio web: http://es.ccm.net/contents/66-introduccion-bases-de-datos MySQL. (1/04/2014). MySQL Workbench. 24/06/2015, de MySQL Sitio web: https://www.mysql.com/products/workbench/ Margaret Rouse. (10/01/2015). MySQL. 24/06/2015, de SearchDataCenter Sitio web: http://searchdatacenter.techtarget.com/es/definicion/MySQL PhpMyAdmin. (2012). Documentación phpMyAdmin. 06/07/2015, de The phpMyAdmin devel team. Sitio web: https://phpmyadmin-spanish.readthedocs.org/es/latest/credits.html Steffen Macke - Betrieb von Webseiten. (1997). Dia Diagram Editor. 27/072015, de Sitio web: http://dia-installer.de/index.html.es