Foros del Web » Programando para Internet » PHP »

organizar base de datos con tablas que compartan informacion y proyecto php

Estas en el tema de organizar base de datos con tablas que compartan informacion y proyecto php en el foro de PHP en Foros del Web. Hola comunidad, me veo en la necesidad de consultarles sobre un proyecto que estoy realizando y me encuentro algo confuso para poder materializarlo. les cuento ...
  #1 (permalink)  
Antiguo 18/05/2014, 19:47
 
Fecha de Ingreso: octubre-2011
Mensajes: 2
Antigüedad: 12 años, 6 meses
Puntos: 0
organizar base de datos con tablas que compartan informacion y proyecto php

Hola comunidad, me veo en la necesidad de consultarles sobre un proyecto que estoy realizando y me encuentro algo confuso para poder materializarlo.

les cuento tengo que hacer una pagina web para administrar el mantenimiento de maquinas, el proyecto en cuestión tiene que tener esto.

1. tabla usuarios, con niveles de acceso, Jefe, administrador, y coordinador
2. tabla de datos para las obras que se están realizando que incluya nombre de la obra, descripción de la obra, jefes de la obra, administradores de la obra, y coordinadores de la obra
3. tabla para las equipos (las maquinas) que incluya identificador, tipo, marca, modelo, registro, en que obra esta asignado, en que fecha ingreso a la obra, en que fecha salio de la obra, que función realiza si esta operativa, y el usuario responsable de ella,
4. tabla para el mantenimiento de los equipos, que incluya, el numero del equipo, kilómetros, cuando le toca el siguiente service, fecha del service, y todo esto histórico por meses, días, anos,

el detalle que tengo es que todas estas tablas tienen que relacionarse entre si, por ejemplo:

la tabla usuarios debe tener un campo
usuario_idobra

donde se escriba las obras de las que forma parte cada usuario, estoy seria fácil recogiendo el id de las obras de la respectiva tabla de obras y escribirlo en esta, pero el problema que tengo es que un usuario puede formar parte de varias obras, y no se que tipo de datos se debe seleccionar en la base de datos para este campo, que permita insertar múltiples valores (int,varchar,set,enum) etc. ejemplo

el campo usuario_idobra debería tener valores como

usuario_idobra obra1, obra4, obra8,

todos estos provenientes de la tabla obras. a su vez como seria en el php para escribir multiples valores en un campo de la tabla y para luego consultarlos de manera separada

es decir: usuarios que pertenecen a la obra1
todos los que en el campo usuario_idobra tengan la obra1:
juan
lucas
pedro
matias

o en otro caso

a que obras pertenece juan:
obra1 que en la tabla de obras tendría un nombre como por ejemplo edificio residencial
obra4: centro comercial
etc.

igualmente como seria para el histórico de manteamiento, para tener registro de por ejemplo km que se hicieron diarios, al mes, al ano.

etc,

muchas gracias de antemano soy un novato tener consideración de mi

si no me supe explicar bien en los términos correctos me dicen para aclararles mejor el asunto.

saludos

Actualización,

estoy usando claves foranea, pero no se si para lo que necesito vale que que sean INT, quizas tengan que ser varchar? y es posible el uso de claves foraneas entre una int y una varchar? necesitan las dos ser iguales?

la estructura de la base de datos que estoy trabajando con las claves foraneas va algo asi, por favor me pueden ayudar a dejarla bien para lo que necesito:

Código:
--
-- Base de datos: `machinecontrol`
--
CREATE DATABASE IF NOT EXISTS `machinecontrol` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `machinecontrol`;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `equipos`
--

DROP TABLE IF EXISTS `equipos`;
CREATE TABLE IF NOT EXISTS `equipos` (
`equipo_id` int(11) unsigned NOT NULL,
  `equipo_interno` varchar(50) NOT NULL DEFAULT '',
  `equipo_tipo` varchar(200) NOT NULL DEFAULT '',
  `equipo_marca` varchar(100) NOT NULL DEFAULT '',
  `equipo_modelo` varchar(100) NOT NULL DEFAULT '',
  `equipo_dominio` varchar(100) NOT NULL DEFAULT '',
  `equipo_ano` int(11) unsigned NOT NULL,
  `equipo_potencia` int(11) unsigned NOT NULL,
  `equipo_motor` varchar(100) NOT NULL DEFAULT '',
  `equipo_serie` varchar(100) NOT NULL DEFAULT '',
  `equipo_propiedad` varchar(100) NOT NULL DEFAULT '',
  `equipo_vtopoliza` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `equipo_idobra` int(11) unsigned NOT NULL,
  `equipo_ingresoobra` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `equipo_egresoobra` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `equipo_funcion` varchar(100) NOT NULL DEFAULT '',
  `equipo_observacion` varchar(300) NOT NULL DEFAULT '',
  `equipo_idresponsable` int(11) unsigned NOT NULL,
  `equipo_operativo` enum('SI','NO') NOT NULL,
  `equipo_estado` enum('TP','FS','OK') NOT NULL,
  `equipo_problema` varchar(200) NOT NULL DEFAULT '',
  `equipo_problemadescripcion` varchar(300) NOT NULL DEFAULT '',
  `equipo_repuesto` varchar(300) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `mantenimiento`
--

DROP TABLE IF EXISTS `mantenimiento`;
CREATE TABLE IF NOT EXISTS `mantenimiento` (
`mantenimiento_id` int(11) unsigned NOT NULL,
  `mantenimiento_interno` varchar(50) NOT NULL DEFAULT '',
  `mantenimiento_descripcion` varchar(200) NOT NULL DEFAULT '',
  `mantenimiento_frecuencia` bigint(20) unsigned NOT NULL,
  `mantenimiento_proxservice` int(11) unsigned NOT NULL,
  `mantenimiento_faltan` int(11) unsigned NOT NULL,
  `mantenimiento_contador` int(11) unsigned NOT NULL,
  `mantenimiento_fechaultimoservice` date NOT NULL,
  `mantenimiento_estado` varchar(100) NOT NULL DEFAULT '',
  `mantenimiento_entrada` date NOT NULL,
  `mantenimiento_salida` date NOT NULL,
  `mantenimiento_idresponsable` int(11) unsigned NOT NULL,
  `mantenimiento_idobra` int(11) unsigned NOT NULL,
  `mantenimiento_fecha` date NOT NULL,
  `mantenimiento_tipo` enum('hora','km') NOT NULL,
  `fecha` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `obras`
--

DROP TABLE IF EXISTS `obras`;
CREATE TABLE IF NOT EXISTS `obras` (
`obra_id` int(11) unsigned NOT NULL,
  `obra_interno` varchar(50) NOT NULL DEFAULT '',
  `obra_nombre` varchar(200) NOT NULL DEFAULT '',
  `obra_descripcion` varchar(200) NOT NULL DEFAULT '',
  `obra_jefes` varchar(100) NOT NULL DEFAULT '',
  `obra_administrativos` varchar(100) NOT NULL DEFAULT '',
  `obra_coordinadores` varchar(100) NOT NULL DEFAULT '',
  `fecha` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuarios`
--

DROP TABLE IF EXISTS `usuarios`;
CREATE TABLE IF NOT EXISTS `usuarios` (
`usuario_id` int(11) unsigned NOT NULL,
  `usuario_nombre` varchar(50) NOT NULL DEFAULT '',
  `usuario_user` varchar(50) NOT NULL DEFAULT '',
  `usuario_clave` varchar(32) NOT NULL DEFAULT '',
  `usuario_cargo` enum('administrativo','jefe','coordinador') NOT NULL DEFAULT 'administrativo',
  `usuario_idobra` int(11) unsigned NOT NULL,
  `usuario_telefono` varchar(50) NOT NULL DEFAULT '',
  `usuario_email` varchar(50) NOT NULL DEFAULT '',
  `usuario_freg` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `nivel` enum('comun','admin') NOT NULL DEFAULT 'comun'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `equipos`
--
ALTER TABLE `equipos`
 ADD PRIMARY KEY (`equipo_id`), ADD KEY `equipo_idobra` (`equipo_idobra`), ADD KEY `equipo_idresponsable` (`equipo_idresponsable`);

--
-- Indices de la tabla `mantenimiento`
--
ALTER TABLE `mantenimiento`
 ADD PRIMARY KEY (`mantenimiento_id`), ADD KEY `mantenimiento_idobra` (`mantenimiento_idobra`), ADD KEY `mantenimiento_idresponsable` (`mantenimiento_idresponsable`);

--
-- Indices de la tabla `obras`
--
ALTER TABLE `obras`
 ADD PRIMARY KEY (`obra_id`);

--
-- Indices de la tabla `usuarios`
--
ALTER TABLE `usuarios`
 ADD PRIMARY KEY (`usuario_id`), ADD KEY `usuario_idobra` (`usuario_idobra`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `equipos`
--
ALTER TABLE `equipos`
MODIFY `equipo_id` int(11) unsigned NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT de la tabla `mantenimiento`
--
ALTER TABLE `mantenimiento`
MODIFY `mantenimiento_id` int(11) unsigned NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT de la tabla `obras`
--
ALTER TABLE `obras`
MODIFY `obra_id` int(11) unsigned NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT de la tabla `usuarios`
--
ALTER TABLE `usuarios`
MODIFY `usuario_id` int(11) unsigned NOT NULL AUTO_INCREMENT;
--
-- Restricciones para tablas volcadas
--

--
-- Filtros para la tabla `equipos`
--
ALTER TABLE `equipos`
ADD CONSTRAINT `equipos_ibfk_2` FOREIGN KEY (`equipo_idresponsable`) REFERENCES `usuarios` (`usuario_id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `equipos_ibfk_1` FOREIGN KEY (`equipo_idobra`) REFERENCES `obras` (`obra_id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Filtros para la tabla `mantenimiento`
--
ALTER TABLE `mantenimiento`
ADD CONSTRAINT `mantenimiento_ibfk_2` FOREIGN KEY (`mantenimiento_idobra`) REFERENCES `obras` (`obra_id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `mantenimiento_ibfk_1` FOREIGN KEY (`mantenimiento_idresponsable`) REFERENCES `usuarios` (`usuario_id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Filtros para la tabla `usuarios`
--
ALTER TABLE `usuarios`
ADD CONSTRAINT `usuarios_ibfk_1` FOREIGN KEY (`usuario_idobra`) REFERENCES `obras` (`obra_id`) ON DELETE CASCADE ON UPDATE CASCADE;

Última edición por samuaz; 18/05/2014 a las 21:45

Etiquetas: bases-de-datos, php+bd+mysql, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:06.