Ver Mensaje Individual
  #11 (permalink)  
Antiguo 19/01/2013, 04:35
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: Varias preguntas

Exacto.
Tienes que recordar siempre que si relacionas una tabla cuya PK es compuesta, la FK que tomas debe representar esa PK, por ende la FK en la tercera tabla requiere siempre todos los campos de la PK compuesta, con el mismo tipo de dato, y en el mismo orden.
Con esto último me refiero a que si la PK fuese, por ejemplo un conjunto como: (numero, fecha, varchar, numero), la tabla que tome esa FK debe contar con esos mismos cuatro campos, y la declaración de FK los debe listar en el mismo orden.
Hay que tener mucho cuidado con no confundir los tipos de columna que se usen en ambas tablas, especialmente los campos VARCHAR, porque si uno es declarado como charset latin1 y el otro UTF8, no te permitirá crear la FK, ya que a nivel binario los mismos caracteres no tienen el mismo valor binario. Usan representaciones distintas.
¿Se entiende?

Es común que los que comienzan en este tema cometan ese tipo de errores sin saberlo, y luego no entienden por qué falla.

En el caso de los campos numéricos ambos deben ser del mismo tipo, sea con singo o sin signo, ya que el rango de representación es diferente en un caso u otro.
Por ejemplo: el TINYINT con signo representa numeros entre el +127 y -128, pero el TINYINT UNSIGNED representa números entre el 0 y 255. Como puedes ver, no tienen el mismo rango, y por eso no se puede crear una FK con tipos cruzados.

Un consejo final sobre el nombre de las PK y las FK: Normalmente, por simpleza y facilidad de lectura y escritura, se recomienda que no se usen nombres como "ID", "FECHA", y cosas simples así. Es decir, no uses nombres abreviados que no te permitan saber a qué tabla pertenecen.
Lo que conviene es que esos campos tengan como prefijo o sufijo parte del nombre de la tabla.
Exactamente como muestra tu gráfico.
Pero también es muy conveniente que los campos que van como FK en otra tabla tengan el mismo nombre de su campo de origen, sin prefijos adicionados o nombres cambiados, si no es estrictamente por necesidades reales de implementación.
Con esto último me refiero, por ejemplo, al caso de que haya dos FK en una misma tabla que apunten a la misma tabla referenciada. De algún modo una de las dos FK debe diferenciarse de la otra.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)