Ver Mensaje Individual
  #8 (permalink)  
Antiguo 18/05/2011, 20:15
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: problemas al insertar datos en dos tablas

Hola,

Cita:
Iniciado por Juanchooo Ver Mensaje
.. en mi opinion si deberia dejar ese campo, ya que seria el id unico con el que se identificaria ese registro en la tabla de relaciones, ya que sin el no habria manera de identificar cada uno de los registros, recordemos que como es una tabla de relaciones habra varios campos con un mismo valor (por ejemplo id_disenador en el caso que tenga mas de un proyecto asignado, o id_proyecto que obviamente habra varios disenadores trabajando en el) ...
Nop ... es absolutamente inútil, es decir, ese campo al final nunca sirve de nada. Por eso escribí: la llave primaria debe ser diseñador más proyecto, al juntar el id_diseñador más el id_proyecto te da una 'llave única'. Por si acaso ... sí se pueden hacer llaves primarias de dos campos. Y esa unión de campos diseñador MÁS proyecto nunca se va a repetir y va a ser única ... como deben ser las llaves primarias.

¿Por qué?

La respuesta es sencilla, nunca vas a buscar por idproyectodisenador, ese código nunca lo vas a saber con antelación, por lo menos no en un sistema 'amigable', si vas a eliminar a un diseñador de un proyecto, necesitas el ID del diseñador y el ID del proyecto. O acaso tu programa va a preguntar: ingrese el ID que se guardo hace tres meses para juntar el ID del diseñador y el ID del proyecto, que no es ninguno de los dos anteriores, y usted lo tuvo que haber apuntado en algún lugar.

Si lo pones en un ejemplo es claro y evidente:
Código:
			______llave primaria______
IDProyectoDiseñador	IDDiseñador	IDProyecto
1			1		1
2			1		2
3			2		1
Veamos la eliminación de un diseñador de un proyecto:
Código SQL:
Ver original
  1. DELETE FROM tabla WHERE id_disenador = 1 AND id_proyecto = 1

Quiero borrar todos los proyectos del diseñador 1:
Código SQL:
Ver original
  1. DELETE FROM tabla WHERE id_disenador = 1

Quiero borrar el proyecto 1 y todos sus diseñadores:
Código SQL:
Ver original
  1. DELETE FROM tabla WHERE id_proyecto = 1

¿O qué .. vas a sacar el ID de cada uno para borrarlos? Y lo mismo sucede con el update. Un programa decente mostraría un listado de los proyectos en los cuales está trabajando cada diseñador, y con eso tienes suficiente para 'ubicar' un registro, una vez la llave primaria sea : IDDiseñador MAS IDProyecto.

Pero bueno ... al final el que está haciendo el programa eres tu.

Saludos,

ps:

Cuando digo ID mas ID .. no es una suma. Es la unión de dos campos para formar una llave primaria como casi cualquier base de datos permite hacer.

Última edición por HackmanC; 18/05/2011 a las 20:36 Razón: alinear la tabla y subrayar las partes importantes