Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/12/2014, 21:46
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: [Ayuda]Las FK deben estar compuestas por primary key del mismo tipo?

Una FK debe ser igual a la PK a que hace referencia.
Si la PK es como describes, así debe ser la FK.

Para ser específicos, tienes que entender claramente lo que es una FK: Es un campo o conjunto de campos que referencia a la PK de otra tabla, siendo que debe cumplir el principio de igualdad a la clave referida, la forma de constituir la FK dependerá de cómo esté definida la PK en la tabla a la que apunta.
No existen, en ese sentido, muchos limitantes de la PK, a excepción que no se pueden usar campos TXT o BLOB para ello. Fuera de eso, mientras la PK sea única y no nula (reglas básicas), la puedes crear con cualquier tipo de dato o conjunto de ellos.
Lo que si debes tener en cuenta cuando luego creas la FK es que debe:
1) Tener la misma cantidad de campos.
2) Cada campo debe ser exactamente del mismo tipo del que compone la PK.
3) Si es una PK compuesta, la definición de la FK debe respetar el mismo orden de los campos que aparecen en la PK de referencia.


Esto ultimo quiere decir que si tienes una tabla donde la PK al momento de crearla es:

Código MySQL:
Ver original
  1. ...
  2. PRIMARY KEY(a, b, c)
La FK debe definirse en su cláusula correspondiente como:
Código MySQL:
Ver original
  1. ...
  2. FOREIGN KEY (a, b, c) REFERENCES tabla(a, b, c)

Si la pusieras como
Código MySQL:
Ver original
  1. ...
  2. FOREIGN KEY (c, a, b) REFERENCES tabla(a, b, c)
no sería correcto y dispararía un error de ejecución y no se crearía la FK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/12/2014 a las 08:42