Evilnapsis

Programming, Hacking and More

Databases

Modelo de BD de un Sistema de Administración de Proyectos

Hola amigos, hoy les voy a explicar el modelo de base de datos de un sistema de administración de proyectos basico.

Este modelo de base de datos es una fracción del modelo del sistema Projectile.

Tablas

El sistema de adminstracion de proyectos cuenta con las siguientes tablas.

  • User: Almacena los datos de los usuarios que acceden al sistema
  • Status: Almacena los estados para los tickets
  • Project: guarda los datos de los proyectos
  • Module: Almacena los módulos del proyecto
  • Task: Almacena las tareas por hacer del proyecto
  • Ticket: Almacena los tickets levantados para el proyecto
  • File: Registro de archivos relacionados con el proyecto

Modelo Entidad-relacion

Ahora vamos a ver el modelo de relacion de las tablas, para esto use el sistema MySQL Workbench.

Tabla user

La tabla user sirve para almacenar los datos del usuario que inicia sesion en el sistema y puede manejar el sistema.

create table user (
	id int not null auto_increment primary key,
	name varchar(50),
	lastname varchar(50),
	email varchar(255),
	password varchar(60),
	status int default 0,
	kind int default 1,
	created_at datetime
);

La tabla user cuenta con los siguientes campos:

  • id: identificador llave primaria
  • name: nombre real del usuario
  • lastname: apellidos del usuario
  • email: correo electrónico del usuario
  • password: contraseña del usuario
  • status: Estado del usuario
  • kind: tipo de usuario
  • created_at: fecha de creación del usuario

Tabla status

La tabla status sirve para manejar los estados de los tickets.

create table status (
	id int not null auto_increment primary key,
	name varchar(50)
	);

la tabla status solo tiene 2 campos, el identificador llave primaria y el nombre del estado, por ejemplo: Pendiente, En proceso, terminado, etc…

Tabla project

La tabla project sirve para almacenar los datos de los proyecto.

create table project (
	id int not null auto_increment primary key,
	name varchar(50),
	description varchar(255),
	user_id int not null,
	created_at datetime,
	foreign key(user_id) references user(id)
);

Los campos son los siguientes:

  • id: Identificador llave primaria
  • name: Nombre del proyecto
  • description: descripción del proyecto
  • user_id: id del usuario que crea el proyecto
  • created_at: fecha de creación del proyecto

Tabla module

La tabla module sirve para registrar los módulos de un proyecto, pueden ser las partes en las que se va a subdividir el proyecto y estos módulos se van a usar para las tareas, tickets y archivos.

create table module (
	id int not null auto_increment primary key,
	name varchar(50),
	description varchar(255),
	project_id int not null,
	created_at datetime,
	foreign key(project_id) references project(id),
	user_id int not null,
	foreign key(user_id) references user(id)
);

Los campos de la tabla module son:

  • id: identificador auto incremental
  • name: nombre del modulo
  • description: descripcion del modulo
  • project_id: id del proyecto al cual pertenece el modulo
  • created_at: fecha de creación del modulo
  • user_id: id del usuario que crea el modulo

Tabla task

La tabla task sirve para registrar tareas por hacer en el proyecto.

create table task (
	id int not null auto_increment primary key,
	name varchar(50),
	description varchar(255),
	project_id int not null,
	module_id int not null,
	is_finished boolean default 0,
	created_at datetime,
	foreign key(project_id) references project(id),
	foreign key(module_id) references module(id),
	user_id int not null,
	foreign key(user_id) references user(id)
	);

Los campos con los que cuenta la tabla task son los siguientes:

  • id: identificador llave primaria
  • name: nombre o titulo de la tarea
  • description: descripción mas detallada de la tarea
  • project_id: id del proyecto al cual pertenece la tarea
  • module_id: id del modulo al cual esta asociado la tarea
  • is_finished: Estado de la tarea, cuando is_finished=1 la tarea esta terminada
  • user_id: Id del usuario que crea la tarea

Tabla ticket

La tabla ticket sirve para registrar tickets o boletos de soporte para el proyecto.

create table ticket (
	id int not null auto_increment primary key,
	name varchar(50),
	description varchar(255),
	project_id int not null,
	module_id int not null,
	status_id int not null,
	created_at datetime,
	foreign key(project_id) references project(id),
	foreign key(module_id) references module(id),
	foreign key(status_id) references status(id),
	user_id int not null,
	foreign key(user_id) references user(id)
);

Los campos de la tabla ticket son:

  • id: identificador llave primaria
  • name: nombre o titulo del ticket
  • description: descripción detallada del ticket
  • proyect_id: id del proyecto al cual pertenece el ticket
  • module_id: id del modulo del ticket
  • status_id: id del estado del ticket
  • created_at: fecha de creación del ticket
  • user_id: id del usuario que crea el ticket

Tabla file

La tabla file sirve para almacenar archivos, de los archivos solo guardamos el nombre y el archivo fisico lo guardamos en el servidor.

create table file (
	id int not null auto_increment primary key,
	name varchar(50),
	description varchar(255),
	file varchar(255),
	project_id int not null,
	module_id int not null,
	created_at datetime,
	foreign key(project_id) references project(id),
	foreign key(module_id) references module(id),
	user_id int not null,
	foreign key(user_id) references user(id)	
);

Los campos de la tabla fileson:

  • id: identificador llave primaria
  • name: nombre o titulo del archivo
  • description: descripción detallada del archivo
  • file: Nombre del archivo físico
  • proyect_id: id del proyecto al cual pertenece el archivo
  • module_id: id del modulo del archivo
  • created_at: fecha de creación del ticket
  • user_id: id del usuario que crea el ticket

Consideraciones generales

Algunas consideraciones que debemos tener en cuenta en la base de datos son las siguientes:

Todas las llaves primarias de las tablas son auto_increment es decir que se van a auto incrementar automáticamente, empezando en 1.

Todos los campos que son varchar(numero) donde numero es el numero de caracteres que aceptan, este numero se puede cambiar por el que ustedes quieran.

Todos los campos created_at datetime que asignaran usando la función mysql NOW() que inserta la fecha y hora actual.

Agustin Ramos

Desarrollador de Software

Leave a Reply