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

¿Puedo tener una llave primaria como foránea en dos tablas distintas?

Estas en el tema de ¿Puedo tener una llave primaria como foránea en dos tablas distintas? en el foro de Mysql en Foros del Web. por ejemplo tabla1 idtabla1 pk tabla2 idtabla2 pk idtabla1 fk tabla3 idtabla3 pk idtabla1 fk no se si me di a explicar pero bueno esa ...
  #1 (permalink)  
Antiguo 24/07/2014, 13:57
 
Fecha de Ingreso: julio-2014
Mensajes: 1
Antigüedad: 10 años, 3 meses
Puntos: 0
¿Puedo tener una llave primaria como foránea en dos tablas distintas?

por ejemplo

tabla1
idtabla1 pk

tabla2
idtabla2 pk
idtabla1 fk

tabla3
idtabla3 pk
idtabla1 fk

no se si me di a explicar pero bueno esa es mi duda por que si me deja hacer las relaciones y todo pero a la hora de hacer un simple select ahi esta el problema
me repite los registros trate de hacer un filtro con el where pero nada :)
  #2 (permalink)  
Antiguo 25/07/2014, 05:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: ¿Puedo tener una llave primaria como foránea en dos tablas distintas?

Habría que ver lo que estas haciendo.

Des del punto de vista teórico no hay ningún inconveniente para esta situación. Pero depende de lo que hagas en la consulta se pueden repetir registros.

Pongamos un ejemplo entendible:

Una base de datos de personas con sus teléfonos y direcciones (simplificada no tendre en cuenta la posibilidad de las relaciones N:M, lo complicaría y no ayudaría al caso)

Personas
idPersonas PK
...

Telefonos
idTelefonos
idPersonas FK
...

Direcciones
idDirecciones
idPersonas FK
...


Si haces

Código MySQL:
Ver original
  1. SELECT p.*,t.* FROM personas p LEFT JOIN telefonos t ON p.idpersonas=t.idpersonas;

Pepito telefono1
Pepito telefono2

Cada persona saldrá una o mas veces en función de numero de numeros de telefono que tenga, como debe ser.

Código MySQL:
Ver original
  1. SELECT p.*,d.* FROM personas p LEFT JOIN direcciones d ON p.idpersonas=d.idpersonas;

Pepito direccion1
Pepito direccion2


Idem para las direcciones, como debe ser.


Código MySQL:
Ver original
  1. SELECT p.*,d.*,t.*
  2. FROM personas p LEFT JOIN direcciones d ON p.idpersonas=d.idpersonas
  3.                             LEFT JOIN telefonos t ON p.idpersonas=t.idpersonas;

Pepito telefono1 direccion1
Pepito telefono1 direccion2
Pepito telefono2 direccion1
Pepito telefono2 direccion2

Ahora va a hacer lo mismo pero agregando un producto cartesiano entre los registros de las dos tablas auxiliares que están relacionados con la misma persona.

Fíjate que NO estas diciendo nada sobre que relación tienen entre si teléfonos y direcciones, solo si pertenecen a una persona o no. Luego TODO teléfono de Pepito esta relacionado con TODA dirección de Pepito.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/07/2014 a las 05:27

Etiquetas: llave, primaria, registro, select, tabla, tablas, tener
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 10:45.