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

¿Cómo puedo crear clave primaria compuesta?

Estas en el tema de ¿Cómo puedo crear clave primaria compuesta? en el foro de Mysql en Foros del Web. Hola, me gustaría crear una clave primaria compuesta en una tabla de una base de datos. Tras crear la tabla y aún vacía, he enviado ...
  #1 (permalink)  
Antiguo 28/06/2010, 09:36
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años, 8 meses
Puntos: 0
¿Cómo puedo crear clave primaria compuesta?

Hola, me gustaría crear una clave primaria compuesta en una tabla de una base de datos. Tras crear la tabla y aún vacía, he enviado el siguiente comando:
alter table tabla add primary key (campo1, campo2);
pero me da el siguiente error:
ERROR 1068 (42000): Multiple primary key defined

También he probado borrando la tabla y al crearla de nuevo ir indicando junto a cada campo que va a ser clave primaria, pero me da el mismo error.
¿Alguien me puede ayudar por favor?
  #2 (permalink)  
Antiguo 28/06/2010, 09:50
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: ¿Cómo puedo crear clave primaria compuesta?

Sölo puede existir UNA pk por tabla. Si quieres modificar la existente, debes eliminar previamente la que existe (la clave, no el campo).
El problema es que si en la sentencia de creación estás definiendo la PK, debes eliminarla de ella, o no podrás agregar una PK.

Si lo que quieres es crear una clave alternativa, deberás crear un índice UNIQUE.

Nota:
Si la tabla creada tiene una PK autoincremental, no tiene sentido usar una clave compuesta, porque no podrás evitar la inconsistencia de datos en ese caso.

Postea la estructura de la tabla y veamos qué es lo que quieres hacer, así podremos aconsejarte.
__________________
¿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 29/06/2010, 03:42
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: ¿Cómo puedo crear clave primaria compuesta?

LA tabla tiene los siguientes campos: año, trimestre, operario, horas trabajadas.
Pues bién, "operario" es el dni del trabajador (clave foránea de la tabla "trabajador"), sabiendo esto, para identificar una tupla de la tabla se necesita saber un año, trimestre y operario. Por eso había pensado en poner esos tres campos de clave primaria compuesta, ya que por separado sí puede haber varias entradas para un mismo año, trimestre y operario, ¿cómo lo hago?
  #4 (permalink)  
Antiguo 29/06/2010, 05:21
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: ¿Cómo puedo crear clave primaria compuesta?

Las preguntas serían:
- ¿Esa tabla qué representa? Es decir: Cómo describirías la información que debe almacenar esa tabla. ¿Con qué nombre?
- ¿Está, entonces vinculada a una tabla Operario?
- ¿Tiene relación con otra tabla más? SI es así, ¿cuál?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 29/06/2010, 12:20
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: ¿Cómo puedo crear clave primaria compuesta?

A ver, esa tabla tendrá una especie de historial de horas trabajadas por un determinado operario según trimestre y año. Efectivamente esa tabla está vinculada a una tabla de operarios que sólo contiene el dni del operario y su nombre y apellidos, además está vinculada a una tabla "periodo" que contendrá el año y el trimestre. En principio no tiene relación con más tablas que esas dos.

Etiquetas: clave, compuesta, primaria
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 09:25.