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

[SOLUCIONADO] Relacionar 3 tablas

Estas en el tema de Relacionar 3 tablas en el foro de Mysql en Foros del Web. Tengo tres tablas: choferes: ====== codigo_chofer int nombres varchar2(40) tipo_chofer: ======= id_tipo int tipo_chofer varchar2(20) coche: ==== codigo_coche int placa_coche varchar2(15) Qué tipo de relación ...
  #1 (permalink)  
Antiguo 17/06/2015, 15:14
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 6 meses
Puntos: 7
Pregunta Relacionar 3 tablas

Tengo tres tablas:

choferes:
======
codigo_chofer int
nombres varchar2(40)

tipo_chofer:
=======
id_tipo int
tipo_chofer varchar2(20)

coche:
====
codigo_coche int
placa_coche varchar2(15)

Qué tipo de relación une a las tres tablas?

Algo como la relación N:M

Pues cada coche puede tener uno o dos choferes, pero al tener dos choferes uno es piloto y el otro es copiloto. Incluso puede un chofer ser piloto en un auto y copiloto en otro o viceversa.
Cómo hago mi relación de tablas.
Yo uso MYSQL.

Mi tabla de trabajo y consulta sería algo así:

COCHE/CHOFER/TIPO
100/Pablo/Piloto
100/Juan/Copiloto
200/Miguel/Piloto
300/Juan/Piloto
300/Luis/Copiloto
400/Pedro/Piloto
400/Pablo/Copiloto
500/Esteban/Piloto

Y cómo la modelo en MySQLWorkbench.
Gracias.
__________________
Todos somos iguales. NO! a la violencia de género.
  #2 (permalink)  
Antiguo 17/06/2015, 15:46
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 8 meses
Puntos: 36
Respuesta: Relacionar 3 tablas

en mi parecer la haría algo así , me cuentas si necesitas ayuda con todo gusto me dices
bonito día , espero haberte ayudado-

pilotos

id_chofer
nombre_chofer
--------------------------
tipo piloto

id_tipopiloto
tipopiloto
id_piloto
--------------------------
coche

id_coche
placa_coche
id_piloto
id_copiloto
-----------------------------

copiloto

id_copilo
nombre_copiloto

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

nombre_copiloto
en donde id_piloto sea igual a id_chofer
--------------------------------

lee inner join
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #3 (permalink)  
Antiguo 17/06/2015, 16:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Relacionar 3 tablas

Cita:
Iniciado por herzbazi Ver Mensaje
en mi parecer la haría algo así , me cuentas si necesitas ayuda con todo gusto me dices
bonito día , espero haberte ayudado-

pilotos

id_chofer
nombre_chofer
--------------------------
tipo piloto

id_tipopiloto
tipopiloto
id_piloto
--------------------------
coche

id_coche
placa_coche
id_piloto
id_copiloto
-----------------------------

copiloto

id_copilo
nombre_copiloto

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

nombre_copiloto
en donde id_piloto sea igual a id_chofer
--------------------------------

lee inner join
jajaja nada mas se ve una cara bonita y aparecen respuestas ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 18/06/2015, 10:07
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: Relacionar 3 tablas

Cita:
Iniciado por herzbazi Ver Mensaje
en mi parecer la haría algo así , me cuentas si necesitas ayuda con todo gusto me dices
bonito día , espero haberte ayudado-

pilotos

id_chofer
nombre_chofer
--------------------------
tipo piloto

id_tipopiloto
tipopiloto
id_piloto
--------------------------
coche

id_coche
placa_coche
id_piloto
id_copiloto
-----------------------------

copiloto

id_copilo
nombre_copiloto

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

nombre_copiloto
en donde id_piloto sea igual a id_chofer
--------------------------------

lee inner join
Según lo que indicas debo crera una tabla copiloto?
Pero yo ya tengo estas tres tablas.
__________________
Todos somos iguales. NO! a la violencia de género.
  #5 (permalink)  
Antiguo 18/06/2015, 10:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Relacionar 3 tablas

y si solo agregas codigo chofer a tu tabla coche??


choferes:
======
codigo_chofer int
nombres varchar2(40)

tipo_chofer:
=======
id_tipo int
tipo_chofer varchar2(20)

coche:
====
codigo_coche int
placa_coche varchar2(15)
codigo_chofer

y que tu llave primaria sea codigo coche codigo chofer :) y ahi se cumple que un chofer pueda ser copiloto o piloto de coches diferentes, lo que si no se podria es que un chofer fuera piloto y copiloto del mismo auto :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 18/06/2015, 16:12
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: Relacionar 3 tablas

Cita:
Iniciado por Libras Ver Mensaje
y si solo agregas codigo chofer a tu tabla coche??


choferes:
======
codigo_chofer int
nombres varchar2(40)

tipo_chofer:
=======
id_tipo int
tipo_chofer varchar2(20)

coche:
====
codigo_coche int
placa_coche varchar2(15)
codigo_chofer

y que tu llave primaria sea codigo coche codigo chofer :) y ahi se cumple que un chofer pueda ser copiloto o piloto de coches diferentes, lo que si no se podria es que un chofer fuera piloto y copiloto del mismo auto :P
Entonces mi nueva tabla sería:

Tabla_Coche_Chofer
============
codigo_coche int (PK)
codigo_chofer int (PK)
id_tipo int (FK)

Y así puedo indicar que en ese coche, ese chofer es piloto o copiloto. Cierto?
__________________
Todos somos iguales. NO! a la violencia de género.
  #7 (permalink)  
Antiguo 18/06/2015, 16:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Relacionar 3 tablas

Asi es
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 18/06/2015, 16:25
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 8 meses
Puntos: 36
Respuesta: Relacionar 3 tablas

esa es otra opción seguro hay varias formas de hacerlo... ya sabes pasa un bonito día. si necesitas apoyo para terminar nos dices ...
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #9 (permalink)  
Antiguo 18/06/2015, 16:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Relacionar 3 tablas

Cita:
Iniciado por herzbazi Ver Mensaje
esa es otra opción seguro hay varias formas de hacerlo... ya sabes pasa un bonito día. si necesitas apoyo para terminar nos dices ...
Como bien ha dicho Gnzoloyo 2 analistas pueden llegar a diferentes soluciones, las cuales pueden ser igual de eficientes. Aunque el agregar una tabla copiloto se me hace que esta de mas cuando tienes una tabla con los tipos de piloto ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 21/07/2015, 17:04
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: Relacionar 3 tablas

Cita:
Iniciado por Libras Ver Mensaje
Como bien ha dicho Gnzoloyo 2 analistas pueden llegar a diferentes soluciones, las cuales pueden ser igual de eficientes. Aunque el agregar una tabla copiloto se me hace que esta de mas cuando tienes una tabla con los tipos de piloto ;)
No sé a qué tabla copiloto te refieres. Y la tabla con los tipos de piloto es porque los pilotos se pueden repetir en varios coches, pero no todos son pilotos. Eso lo expliqué al inicio.
Todavía no lo he desarrollado porque he tenido un problema con otras tablas.
__________________
Todos somos iguales. NO! a la violencia de género.
  #11 (permalink)  
Antiguo 22/07/2015, 05:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Relacionar 3 tablas

Cita:
Y la tabla con los tipos de piloto es porque los pilotos se pueden repetir en varios coches, pero no todos son pilotos
Eso suena algo contradictorio...
SI un X individuo es piloto, y puede haber un segundo individuo relacionado con el mismo vehículo, pero no es piloto, entonces no puede estar en la misma tabla. Podría ser un esquema padre->hijo, donde haya una entidad principal y ambos individuos fuesen instancias de una entidad de segundo grado, pero NO pueden estar ne la misma tabla sino no cumplen la misma función.
Ponerlos en la misma instancia sería un error incluso en programación.

Ahora bien, volviendo a esto:

Cita:
cada coche puede tener uno o dos choferes, pero al tener dos choferes uno es piloto y el otro es copiloto. Incluso puede un chofer ser piloto en un auto y copiloto en otro o viceversa.
Este esquema resulta insuficiente para poder crear las relaciones que se infieren de la descripción.
Cita:
choferes:
======
codigo_chofer int
nombres varchar2(40)

tipo_chofer:
=======
id_tipo int
tipo_chofer varchar2(20)

coche:
====
codigo_coche int
placa_coche varchar2(15)
El tema es que si un mismo vehiculo puede ser conducido en diferentes momentos del tiempo por un mismo chofer, con un copiloto registrado (supongamos opcional), y el copiloto puede ser chofer en otro momento del tiempo, entonces está faltando al menos una tabla que defina los momentos del tiempo donde eso suceda.
Usualmente en una empresa de transporte de cargas o pasajeros, eso se resuelve con una tabla "Viajes" o bien "Servicios", que determina inicio, final, fecha, origen, destino, chofer titular y chofer suplente, como mínimo.
En ese contexto el vehículo y los choferes se relacionan con el viaje para un momento dado del tiempo.
Si además el chifer y su copiloto intercambian posiciones durante el mismo servicio (por requisito legal de tiempo maximo de manejo continuado), entonces se requiere una tabla adicional que establezca los periodods de manejo relacionados con la tabla del servicio.

¿Se entiende?

En esencia, para un sistema mas o menos realista, un esquema de tres tablas es insuficiente para aportar información fidedigna y consistente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: relacionar, sql, tabla, 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 02:27.