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

Se pueden crear 2 llaves primarias en mysql ?

Estas en el tema de Se pueden crear 2 llaves primarias en mysql ? en el foro de Mysql en Foros del Web. Hola quiero hacer lo siguiente: tengo las tablas |contacto |_______________|grupo| idcontacto pk |___________|idgrupo pk nombre |_________________|nombre es una relacion muchos a muchos por consiguiente creo ...
  #1 (permalink)  
Antiguo 03/11/2010, 13:17
 
Fecha de Ingreso: octubre-2009
Mensajes: 138
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Se pueden crear 2 llaves primarias en mysql ?

Hola quiero hacer lo siguiente:

tengo las tablas

|contacto |_______________|grupo|

idcontacto pk |___________|idgrupo pk
nombre |_________________|nombre

es una relacion muchos a muchos por consiguiente creo otra tabla

contacto_grupo

idcontacto
idgrupo


ambos campos serian la llave primaria(pk) entonces como puedo poner esta referencia a los dos campos o como podria manejarlo desde mysql ,si hay alguna forma, o tendria que manejarlo por programacion para evitar que ese registro se repita



agradezco su colaboracion


saludos
  #2 (permalink)  
Antiguo 03/11/2010, 13:49
Avatar de 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
Puntos: 2658
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

Una tabla tiene siempre una sola PK. Lo que si puedes hacer es crear una PK con más de un campo.
__________________
¿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 03/11/2010, 13:50
 
Fecha de Ingreso: octubre-2009
Mensajes: 138
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

me puedes dar un ejemplo de como hacerlo , te lo agradeceria
  #4 (permalink)  
Antiguo 03/11/2010, 14:25
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

Y que tal usar una llave primaria mas algun campo unico? Es lo mismo?
  #5 (permalink)  
Antiguo 03/11/2010, 14:34
 
Fecha de Ingreso: octubre-2009
Mensajes: 138
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

la solucion que logre fue crear una llave primaria compuesta(en este caso con dos campos) , como lo mencionaba nuestro amigo gnzsoloyo, y tengo entendido que un campo unico nunca se repite en este caso no me serviria ya que un campo si se puede repetir mas no los dos.


saludos
  #6 (permalink)  
Antiguo 03/11/2010, 14:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

Hola Diego_FX:

Perdón, no me había percatado de que ya te habían dado la respuesta, de cualquier manera te dejo lo que escribí en el post, por eso edito mi mensaje.

Saludos

Leo.
------------------------------------------------

Si entendí correctamente tu tabla contacto_grupo contendrá dos campos (idContacto, idGrupo), de tal manera que la combinación de ambos será tu campo llave y además cada campo es un FK hacia las tablas Contacto y Grupo respectivamente, si estoy en un error me lo haces saber.

Para el ejemplo mi BD se llama "pruebas". Puedes crear las tablas así:

Código MySQL:
Ver original
  1. #Creamos la tabla Contacto y asignamos el campo idContacto como llave, de tipo
  2. #entero sin signo y autoincremental
  3. create table `pruebas`.`Contacto`
  4. (  
  5. `nombre` varchar (50) NOT NULL,
  6. PRIMARY KEY (`idContacto`)
  7. );
  8.  
  9. #Creamos la tabla Grupo y asignamos el campo idGrupo como llave, de tipo
  10. #entero sin signo y autoincremental
  11. create table `pruebas`.`Grupo`
  12. (
  13. `nombre` varchar (50) NOT NULL,
  14. PRIMARY KEY (`idGrupo`)
  15. );
  16.  
  17. #Creamos la tabla Contacto_grupo y asignamos los campo idContacto e idGrupo
  18. #como llave compuesta, de tipo entero sin signo
  19. create table `pruebas`.`Contacto_Grupo`
  20. (
  21. `idContacto` int UNSIGNED NOT NULL,
  22. `idGrupo` int UNSIGNED NOT NULL,
  23. PRIMARY KEY (`idContacto`, `idGrupo`)
  24. );
  25.  
  26. #Agregamos una FK de la tabla Contacto_Grupo hacia la tabla Contacto para el
  27. #campo idContacto
  28. alter table `pruebas`.`contacto_grupo` add constraint `FK_contacto_grupo_contacto` FOREIGN KEY (`idContacto`) REFERENCES `contacto` (`idContacto`);
  29.  
  30. #Agregamos una FK de la tabla Contacto_Grupo hacia la tabla Grupo para el
  31. #campo idGrupo
  32. alter table `pruebas`.`contacto_grupo` add constraint `FK_contacto_grupo_grupo` FOREIGN KEY (`idGrupo`) REFERENCES `grupo` (`idGrupo`);

Saludos y espero que te sirva el código.
Leo.

Última edición por leonardo_josue; 03/11/2010 a las 14:46 Razón: Ya le habían dado la respuesta.
  #7 (permalink)  
Antiguo 03/11/2010, 15:00
 
Fecha de Ingreso: octubre-2009
Mensajes: 138
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

Hola leonardo gracias es exaxtamente asi, una pregunta yo podria agregar la referencias de fk en la misma parte que creo la tabla o en este caso no se podria ejm

CREATE TABLE `pruebas`.`Contacto_Grupo`
(`idContacto` INT UNSIGNED NOT NULL,
`idGrupo` INT UNSIGNED NOT NULL,
PRIMARY KEY (`idContacto`, `idGrupo`),
FOREIGN KEY (`idContacto`) REFERENCES `contacto` (`idContacto`),
FOREIGN KEY (`idGrupo`) REFERENCES `grupo` (`idGrupo`)
);

y cuando pones un campo UNSIGNED para que sirve ?


agradezco tu colaboracion


saludos
  #8 (permalink)  
Antiguo 03/11/2010, 15:06
Avatar de 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
Puntos: 2658
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

Cita:
y cuando pones un campo UNSIGNED para que sirve ?
Los ID numéricos deben ser siempre sin signo para poder aprovechar el rango completo de números.
Para decirlo brevemente: Un TINYINT tiene 1 Byte, es decir 8 bits. Si lo usases con signo el rango de representación sería de -128 a + 127, pero sin signo es de 0 a 255. Como los ID autonuméricos, por ejemplo, no pueden generar números negativos al usar enteros con signo estás desperdiciando la mitad de la capacidad del campo.
Además, no existen en la realidad números de ID negativos en ningún orden. No se usan DNI negativos, por ejemplo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 03/11/2010, 15:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Se pueden crear 2 llaves primarias en mysql ?

Hola de nuevo DIEGO_FX

Cita:
Iniciado por DIEGO_FX Ver Mensaje
yo podria agregar la referencias de fk en la misma parte que creo la tabla
Efectivamente, puedes crear las relaciones desde el momento en que estás creando la tabla (yo acostumbro hacerlo aparte, pero no hay ningún problema)

La parte del UNSIGNED ya te lo explicó gnzsoloyo.

Saludos
Leo.

Etiquetas: llaves
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 07:03.