Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿Cómo estructuro estas tablas? (aconsejeme)

Estas en el tema de ¿Cómo estructuro estas tablas? (aconsejeme) en el foro de Mysql en Foros del Web. Buenas! Hola amigos les cuento lo que pretendo hacer y se me complicó todo el panorama. Primero les cuento lo que quiero hacer a modo ...
  #1 (permalink)  
Antiguo 20/02/2011, 21:09
 
Fecha de Ingreso: abril-2010
Mensajes: 112
Antigüedad: 14 años
Puntos: 2
¿Cómo estructuro estas tablas? (aconsejeme)

Buenas!

Hola amigos les cuento lo que pretendo hacer y se me complicó todo el panorama.
Primero les cuento lo que quiero hacer a modo visual, es un combobox que me despliegue en tres distintos selectores multiples de forma anidada pero simultaneos, NO uno primero otro despues y otro al final como escalera.
(Consejos para ajax ya pedi por esos lados Ver tema)
Pero ahora estoy un tanto confundido como debería ser la base de datos.

Esta es mi situación actual

Sé como desplegar invidualmente los correspondientes selectores con un
Código MySQL:
Ver original
  1. SELECT id_tarea, tarea
  2. FROM tareas
  3. WHERE repcaja < 0

Actualmente tengo una tabla en la base de datos que sería una lista de tareas a realizarse a un reloj en reparación.
Teniendo los campos de id, nombre de la tarea, luego los tipos de máquina que aplica y luego las tareas que aplican a cada tipo de maquina.
Los campos booleanos tinyint(1) hacen true o false si aplica o no cierta tarea a cierto tipo de reloj.
Me pasaron exactamente esto (pero con más registros)
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tareas` (
  2.   `id_tarea` int(11) NOT NULL AUTO_INCREMENT,
  3.   `tarea` varchar(45) DEFAULT NULL,
  4.   `qtz` tinyint(1) DEFAULT NULL,
  5.   `chronoqtz` tinyint(1) DEFAULT NULL,
  6.   `auto` tinyint(1) DEFAULT NULL,
  7.   `chronoauto` tinyint(1) DEFAULT NULL,
  8.   `electro` tinyint(1) DEFAULT NULL,
  9.   `otro` tinyint(1) DEFAULT NULL,
  10.   `repbase` tinyint(1) DEFAULT NULL,
  11.   `repmech` tinyint(1) DEFAULT NULL,
  12.   `repcaja` tinyint(1) DEFAULT NULL,
  13.   `reppulsera` tinyint(1) DEFAULT NULL,
  14.   PRIMARY KEY (`id_tarea`)
  15.  
  16. --
  17. -- Volcar la base de datos para la tabla `tareas`
  18. --
  19.  
  20. INSERT INTO `tareas` (`id_tarea`, `tarea`, `qtz`, `chronoqtz`, `auto`, `chronoauto`, `electro`, `otro`, `repbase`, `repmech`, `repcaja`, `reppulsera`) VALUES
  21. (1001, 'Devuelto x mal estado', -1, -1, -1, -1, 0, 0, -1, 0, 0, 0),
  22. (1002, 'Revision y Limpieza', -1, -1, -1, -1, 0, 0, -1, 0, 0, 0),
  23. (1003, 'Sellos', -1, -1, -1, -1, 0, 0, -1, 0, 0, 0),
  24. (1008, 'Se limpio denuevo', -1, -1, -1, -1, 0, 0, -1, 0, 0, 0),
  25. (1009, 'Control atrasa', -1, -1, -1, -1, 0, 0, -1, 0, 0, 0),
  26. (2001, 'Tornillos fondo', -1, 0, -1, 0, 0, 0, 0, -1, 0, 0),
  27. (2003, 'Empaquetadura de corona', -1, -1, -1, -1, 0, 0, 0, -1, 0, 0),
  28. (2004, 'Pulsador (2)', 0, -1, 0, -1, 0, 0, 0, -1, 0, 0),
  29. (2005, 'Punteros crono (tot 1/10)', -1, -1, -1, -1, 0, 0, 0, -1, 0, 0);

Para la finalidad de hacer un combo, creo que tengo claro que debería hacer una tabla para los tipos de mecanismos...pero al tener que relacionarlo con el resto se me complica y no puedo ver bien la situacion teniendo la tabla actual tal como está

Creo que debería hacer cirugía mayor a la tabla para obtener los resultados que quiero ¿O no?

¿Alguna sugerencia?

Espero sus comentarios.

Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 21/02/2011, 02:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ¿Cómo estructuro estas tablas? (aconsejeme)

Entiendo que los tipos de reloj son los campos siguientes

`qtz` TINYINT(1) DEFAULT NULL,
`chronoqtz` TINYINT(1) DEFAULT NULL,
`auto` TINYINT(1) DEFAULT NULL,
`chronoauto` TINYINT(1) DEFAULT NULL,
`electro` TINYINT(1) DEFAULT NULL,
`otro` TINYINT(1) DEFAULT NULL,
`repbase` TINYINT(1) DEFAULT NULL,
`repmech` TINYINT(1) DEFAULT NULL,
`repcaja` TINYINT(1) DEFAULT NULL,
`reppulsera` TINYINT(1) DEFAULT NULL,

La estructura ideal serian tres tablas :

TipoReloj
IdTpReloj
Nombre

Tareas
idTarea
Tarea

RelTipoRelojTarea
idTarea
idTpReloj

Esto nos permite una realción N:M y te permitira trabajar con un numero infinito de tipos de reloj... en la estructura que tienes si cambian los tipos de reloj tendrás problemas.

Si mantienes la estructura actual para obtener las tareas de un tipo de reloj seria

SELECT tarea FROM Tareas WHERE $nombretiporeloj=true

$nombretiporeloj no es el nombre de ningun campo por lo que debes construir la sentencia sql en función de la selección previa de un tipo de reloj

en mi estructura

Código MySQL:
Ver original
  1. SELECT tarea FROM tareas
  2.          INNER JOIN RelTipoRelojTarea
  3.                ON tareas.idTarea=RelTipoRelojTarea.idTarea
  4. WHERE RelTipoRelojTarea.idTpReloj=$idTpReloj

donde $idTpReloj es el tipo de reloj elegido.

En definitiva siempre necesitas una selección previa pero la estructura que te propongo es mas general, esta normalizada y admite cualquier ampliación y ocupa mucho menos espacio en disco.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 21/02/2011, 18:56
 
Fecha de Ingreso: abril-2010
Mensajes: 112
Antigüedad: 14 años
Puntos: 2
Respuesta: ¿Cómo estructuro estas tablas? (aconsejeme)

Hola, gracias por responder, lo que creo que no entendí fue que además de las tablas de tareas tipo de reloj y su relación, le faltaría agregar el tipo de reparación correspondiente que sería

`repbase` TINYINT(1) DEFAULT NULL,
`repmech` TINYINT(1) DEFAULT NULL,
`repcaja` TINYINT(1) DEFAULT NULL,
`reppulsera` TINYINT(1) DEFAULT NULL,

Los anteriores a estos eran los tipos de reloj.

¿Pero como relaciono todo?

O sea me quedarían las tablas

TipoReloj
IdTpReloj
Nombre

Tareas
idTarea
Tarea

RelTipoRelojTarea
idTarea
idTpReloj


Más:

tiposTareas (área en el que aplican las tareas a los tiposde relojes)
idTipotarea (id de la tabla)
tipoTarea (descripcion del tipo de tarea por ej "Reparación base, reparacion mecanismo...")
idTarea (id de la tarea asociada a ese grupo)
idTpoReloj (id de los tipos que aplican..)


O no? ¿Que pasa con la tabla que relaciona?

Saludos.

Última edición por Ojopex2; 21/02/2011 a las 19:02
  #4 (permalink)  
Antiguo 22/02/2011, 02:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ¿Cómo estructuro estas tablas? (aconsejeme)

Perdona no lei bien, efectivamente te falta el tercer combo que pedias

TipoReloj
IdTpReloj PK
Nombre

Tareas
idTarea PK
Tarea

RelTipoRelojTarea
idRelTipoRelojTarea PK
idTarea FK
idTpReloj FK

Con esto puedes armar los dos primeros combos, la tabla TipoReloj para elegir el tipo de reloj, y la relacion combinada con Tareas para mostrar las posibles tareas para el reloj elegido.

No acabo de ver como relacionas los digamos Trabajos con lo anterior

Podria ser algo asi

Trabajos
idTrabajo PK
Descripcion

Donde podrias tener tipificados los trabajos, incluso podrias tener un campo para el precio

Si los trabajos dependen de los anteriores

RelTpRTarTrab
IdTpReloj PK
idTarea FK
idTrabajo FK

Si el tipo de trabajo depende del tipo de reloj y tarea elegidos. Si el precio del trabjo tambien depende de estos el campo para el precio, o el tiempo empleado, iria aquí.

Pero estas seguro que solo realizarás un Trabajo para cada tarea y tipo de reloj...

Me falta la identificación del reloj concreto.

Reparaciones
idReparacion PK
Fecha
idCliente FK clientes
idTpReloj FK TipoReloj
idTarea FK Tareas
...

Cabecera de una Reparación donde se identifica el cliente, el tipo de reloj recibido y la tarea pedida

DetalleReparacion
idDetalle PK
idReparacion FK Reparaciones
idTrabajo FK Trabajos

Detalle de la reparación donde puedes identificar tantos trabajos como hayas realizado sobre el reloj identificado por la cabecera. El precio o las horas empleadas tambien podrian ir aqui si son variables en cada caso...

Estas ultimas tablas son las que te permitiran facturar el trabajo. Las anterires son tablas auxiliares que incluso podrian funcionar sin las relaciones pero eso solo lo sabes tu ya que depende de tu negocio.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 22/02/2011 a las 03:05

Etiquetas: 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 01:21.