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

Recomendarme como hacer Primary key de 2 tablas

Estas en el tema de Recomendarme como hacer Primary key de 2 tablas en el foro de Mysql en Foros del Web. Buenas a todos Forosdelweb. Tengo una base datos con 2 tablas unicamente. Ambas relacionadas por medio de una Foreign Key (me han dicho que no ...
  #1 (permalink)  
Antiguo 09/04/2014, 09:09
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Recomendarme como hacer Primary key de 2 tablas

Buenas a todos Forosdelweb.

Tengo una base datos con 2 tablas unicamente. Ambas relacionadas por medio de una Foreign Key (me han dicho que no es necesaria es cierto?).

Bien las tablas son:

clientes
-----------
codcliente integer auto_increment
nombre
apellido

trabajos
-----------
codtrabajo integer auto_increment
codcliente (FKey, que no se si es obligatorio ponerla en fk)
descripcion
precio


Bien esas 2 tablas, creo que deben estar relacionadas por la FK, un maestro me ha dicho que no hoy y me ha confundido, bueno pero el caso es otro.

Duda: Como ven las 2 Pkey son auto_increment, por lo que yo introduzco ejeemplo 3 clientes y 2 trabajos relacionados con 2 de esos clientes, pues luego
cuando yo borre un cliente (para dar de baja ejm: el 2) este también debo borrar el trabajo realizado a el en la tabla trabajos. ok?. Pero el siguiente cliente tendrá codcliente 4, y ese cliente 2 ya no existe porque lo he borrado.

En si cuando lleve ejemplo 100 clientes y haya dado de baja a unos cuantos, la lisa quedará un poco fea e incompleta ya que no van en orden la PRIMARY KEY de codcliente porque habrá registros que se hayan borrado por X motivo..

¿Es fiable hacer unas tablas así?.
Espero me puedan ayudar , y además ¿Es necesaria la FKey que pongo.?

Saludos
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 09/04/2014, 09:26
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Recomendarme como hacer Primary key de 2 tablas

La tabla de Trabajos necesita la FK que apunte a Clientes, porque de lo contrario podrías dar de alta trabajos sin cliente, o bien trabajos asignados a clietnes que ya no existen. Es obligatoria desde el punto de vista funcional.
La PK que tenga la tabla de Trabajos es tema de discusión. Puedes dejarla como la hiciste, con un AI, y eso no te traerá problemas. Personalmente me gusta mas la opción de usar un discrinminante no AI, como por ejemplo un incremental por cliente, generando una clave compuesta, o bien un identificador de otra tabla, como podría ser una de OrdenDeTrabajo, si existiera. Pero en realidd es una decisión de diseño que se toma cuando haces el relevamiento de la empresa donde aplicará.
En cualquie caso, si quieres evitarte problemas al borrar clientes, simplemente le agregas en la definición de la FK las cláusulas ON DELETE CASCADE ON UPDATE CASCADE, y que la base se encargue del resto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/04/2014, 10:16
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Recomendarme como hacer Primary key de 2 tablas

Muchas gracias gnzsoloyo :) .
Me has dado una buena explicación del porque se debe usar FK, y si es cierto, en este caso no debo dar de alta trabajos que no pertenezcan a ningun cliente o a clientes que ya no existan.

Estas en todo lo correcto gracias amigo y disculpa si la pregunta era un poco obvia pero es que justo hoy un maestro me dijo eso y me quede con la duda.

Entonces.. como tu dices, no habrá problemas porque empiece a borrar clientes y queden "salteados" estos codcliente en mi base de datos ?.

Si es así, pues dejo el AI tanto en :

Tabla:
clientes : PK --> codcliente (AI)
trabajos: PK --> codtrabajo (AI)

Gracias por tu respuesta tan rápida. y por ayudar al resto sin nada a cambio más que las GRACIASSS!!!.
Un saludo
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #4 (permalink)  
Antiguo 09/04/2014, 10:28
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Recomendarme como hacer Primary key de 2 tablas

Cita:
clientes : PK --> codcliente (AI)
trabajos: PK --> codtrabajo (AI)
Así no te causará problemas, en tanto no olvides poner la FK como te comentaba.
Lo de la secuencialidad de los numeros AI es total y absolutamente irrelevante. Que haya "huecos" en la numeración no tiene ninguna importancia, ya que no hacen nada. Lo único que importa es la unicidad de la PK, no su continuidad aritmética.

Sobre esto se nos ha preguntado muchísimo, y por eso están estos dos temas de las FAQs, que te recomiendo leer:

Cómo numerar secuencialmente una consulta, sin usar PK
Renumerar un campo autoincremental
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: key, primary, registro, tabla, tablas
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 04:49.