Diseño base de datos relacional IdisGroupwareBd


Para el diseño de la base de datos en la que se soporto nuestra aplicación utilizamos como motor MySQL y como gestor de bases de datos phpMyAdmin para trabajar en equipos Linux y Wamp para trabajar en equipos Windows. Debido a que todas las funcionalidades que ofrece nuestra aplicación necesitan almacenar y obtener información de la base de datos creamos una tabla para cada una de las funcionalidades y en el caso especifico del foro necesitamos de dos debido a que implementamos los comentarios realizados en cada foro con una llave foránea que relacionara unos y otros. Para un claro entendimiento de la estructura de la base de datos procedemos a explicar cada tabla y su uso con mayor detalle a continuación:

Tabla usuario: Empleada para almacenar toda la información correspondiente, como su nombre sugiere, a los usuarios registrados de la aplicación. El script de su creación que especifica su estructura es el siguiente:

CREATE TABLE IF NOT EXISTS `usuario` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `nombres` varchar(50) NOT NULL,
  `apellidos` varchar(50) NOT NULL,
  `user` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  `telefono` varchar(50) NOT NULL,
  `direccion` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `privilegio` int(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user` (`user`)
)

Aquí podemos observar que la llave primaria de la tabla es el id el cual es un valor entero que se autoincrementa conforme vayan registrándose nuevos usuarios en la aplicación, el nombre de usuario denominado user es un campo único para evitar que dos personas puedan tener el mismo nombre de usuario para evitar conflictos y facilitar los procesos de autenticación. 


 
Tabla calendario: Usada para guardar los eventos que se programaran en el calendario colaborativo que ofrece nuestra aplicación con sus aspectos más relevantes como la hora, lugar, motivo, usuario que registra la actividad y las observaciones de la misma. Su estructura esta especificada por el siguiente script:

CREATE TABLE IF NOT EXISTS `calendario` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `user` varchar(50) NOT NULL,
  `hora` int(4) NOT NULL,
  `fecha` date NOT NULL,
  `lugar` varchar(50) NOT NULL,
  `motivo` varchar(50) NOT NULL,
  `observaciones` text NOT NULL,
  PRIMARY KEY (`id`)
)

Su llave primaria es el id, un campo entero que se autoincrementa y que sirve para diferenciar inequívocamente cada uno de los eventos registrados.


Tabla contacto: Utilizada para almacenar la información requerida para la implementación del servicio  de la libreta de direcciones cuya estructura se detalla en el siguiente script:

CREATE TABLE IF NOT EXISTS `contacto` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `user` int(4) NOT NULL,
  `nombres` varchar(50) NOT NULL,
  `apellidos` varchar(50) NOT NULL,
  `movil` varchar(50) NOT NULL,
  `oficina` varchar(50) NOT NULL,
  `direccion` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)

Al igual que las anteriores tablas el id es su llave primaria con las mismas características de los id de las tablas previamente mencionadas.
 

Tabla foro: Como su nombre lo indica esta tabla fue realizada para sustentar la funcionalidad del foro que brinda nuestra aplicación y en la cual se pretendio almacenar la información relacionada con la creación de un foro y los comentarios relacionados con cada uno de los temas que este contenga, por supuesto temas que son creados por los usuarios registrados, su script de creación el cual especifica su estructura es el siguiente:

CREATE TABLE IF NOT EXISTS `foro` (
  `idForo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nombreForo` varchar(50) NOT NULL,
  `descripcion` varchar(150) NOT NULL,
  `autorForo` varchar(50) NOT NULL,
  `horaCreacionForo` time NOT NULL,
  PRIMARY KEY (`idForo`),
  UNIQUE KEY `nombreForo` (`nombreForo`)
)

Aquí podemos observar que su llave primaria es llamada idForo campo entero con autoincremento y como campo único nombreForo que garantiza que no hayan dos temas con el mismo nombre.






Tabla comentarios: Esta es la única tabla que se relaciona a una funcionalidad que ya contenia una tabla asignada, esto con la finalidad de que los comentarios esten relacionados con su respectivo tema por medio de una llave foranea y así establecer una relación formal que nos permitiera mostrar los comentarios de determinado tema de manera sencilla y segura. Su script es el siguiente:

CREATE TABLE IF NOT EXISTS `comentarios` (
  `idComentario` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `comentario` varchar(200) NOT NULL,
  `autorComentario` varchar(50) NOT NULL,
  `horaComentario` time NOT NULL,
  `idForo` int(10) unsigned NOT NULL,
  PRIMARY KEY (`idComentario`),
  KEY `idForo` (`idForo`)
)

Aquí se puede observar además de su llave primaria idComentario la llave foránea idForo que permite establecer la relación estrecha entre el tema creado en el foro y los comentarios que se hagan alrededor del mismo.