Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/05/2009, 10:14
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: 17 años, 1 mes
Puntos: 2658
Respuesta: Duda al Normalizar una tabla Amigos

Una clave primaria no es necesariamente siempre un campo numérico (autoincremental o no). Es un campo o conjunto de campos que identifican univocamente un registro en una tabla dada.
Esa sería la definición de PK.
En este contexto, lo que quiero decirte es que el campo CodInt carece de sentido porque la clave debería ser la combinación de (CodUs, CodUsAmi)... Esto es, una clave compuesta de dos campos.
Lo que significa que no podrás controlar la duplicidad de FK en el caso de ser CodInt una PK, es porque si no defines la relación (CodUs, CodUsAmi) como UNIQUE, entonces podría perfectamente darse el caso de:
CodInt / CodUs / CodUsAmi
1 / 1 / 2
2 / 1 / 2
3 / 1 / 2
Ya que la PK es el primer campo y no los otros dos. Pero si has definido la relación (CodUs, CodUsAmi) como UNIQUE, ¿para qué necesitas entonces el CoInt? En ese caso, en vez de ser solamente UNIQUE la podrías definir como PK y listo... que es precisamente lo que sugiero.
Lo que planteas de que es necesario ese campo, es porque pareciera ser un requisito de la 3FN, pero no es así, porque los dos campos de la relación son determinantes, y según la 3FN el campo de clave se adiciona si ninguno de los atributos de la relación puede ser una clave candidata... cosa que en este caso no se cumple.

¿Se entiende la idea?

Volviendo al principio, el uso de una tabla espejo para almacenar información que ya existe solamente para darle graficación a una relación que se resuelve con una sola tabla, es al menos ineficiente, porque estás duplicando datos, lo que puede tener como consecuencia inconsistencia de datos en la base. Y eso es lo que se pretende evitar cuando se diseña.
SI lo que haces es tener algún proceso que mantenga los datos espejados, resulta ineficiente a nivel de proceso, teniendo en cuenta que eso se resuelve definiendo ambos campos como referidos a la tabla USUARIOS...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)