Problema MySQL PK y FK

Gandalf530

Hola, tengo un problemilla, estoy haciendo un trabajillo en PHP, y por primera vez me puse a toquetear el PHPMyAdmin. Os explico:

Tengo estas dos tablas, que quiero dar de alta en mi BD, bueno, la tabla de Abono sin problemas, 3 atributos, una PK, funciona perfectamente.

El problema viene al meter la tabla de Periodo_abono, tiene dos claves primarias y una de las claves primarias es al mismo tiempo FK de la tabla Abono.

Tirando de internet he leido, que la que va a ser FK, la tienes que declarar como INDEX (indice) y luego desde la opcion Vista de Relaciones, elegir la PK de la tabla Abonos, eso lo hice sin problemas.

Os dejo unas capturas a ver si se entiende mejor lo que hice hasta ahora


Aqui con la tabla creada, se puede ver que declare idAbono como INDEX para meterlo de FK haciendo referencia a idAbono(Abono)


Aqui desde la opcion vista de relaciones, diciendole que idAbono(periodo_abono) haga referencia a idAbono(Abono)

Bueno ahora para terminar tendría que poner idAbono(periodo_abono) como parte de la PK de periodo_abono, junto con la otra PK que ya he declarado, idPeriodoAbono.

El problema es que no me deja.


Aqui, le digo a idAbono, que quiero que sea parte de la PK de la tabla periodo_abono.


Aqui el mensaje de error que me da..

A ver si me podeis ayudar :/ Sino supongo que intentare meterla manualmente con SQL, a ver si asi no da error :/

Thanat0s

Tienes que quitar la que tienes como primary y poner las dos a la vez.

1 1 respuesta
Gandalf530

#2 Pues funcionó, muchas gracias, vaya cosa más rara, ya me dirás que importara crearlos primero uno y luego otro, que los dos al mismo tiempo.

Gracias Thanatos ;)

1 respuesta
Soltrac

#3 Como va a ser una cosa rara???

Tío, cuando creas una tabla le defines una primary key. Si creas una, ya la tienes creada y no puedes crearle otra. Tú estabas intentando crear 2 primary keys, cuando debes crear 1 primary key que englobe a las 2 columnas.

1 respuesta
Gandalf530

#4 Visto asi tiene sentido, es obvio que solo puede haber una PK que puede ser compuesta por mas de 1 atributo, pero, que mas dará añadirle un atributo mas despues, en ved de añadirselos los dos al mismo tiempo.

En fin que da igual, a mi la duda ya me la han resuelto ;)

1 respuesta
glolg

La forma más fácil es tirar de tablas del tipo innodb y con un ALTER TABLE y un CONSTRAINT creas las pk y fk

Soltrac

#5 No se pueden modificar PKs, hay que eliminarlas y crearlas de nuevo, por eso mismo lo que tú dices no se puede hacer.

Sin acritud, deberías mirarte un poco el PL/SQL. Y de verdad, q no te lo digo a malas ni nada de eso, es un consejo.

1
TaiCHoKe

El no quiere dos claves primarias, quiere una clave primaria y una FK.

Ejemplo:

CREATE TABLE ORDERS 
(Order_ID integer, 
Order_Date date, 
Customer_SID integer, 
Amount double, 
Primary Key (Order_ID), 
Foreign Key (Customer_SID) references CUSTOMER(SID));

No definas la FK como PK.

#9 Mi ejemplo no está mal si quiere una clave primaria y una foreign key. Y claro que la clave primaria tiene que ser única cacho prepotente.

#9 Que si hombre que si, que no me fijé en que el queria dos primarias. Mi ejemplo no está mal, solo no aplica a este caso.

1 respuesta
Soltrac

#8 Quiere una PK de 2 columnas y que una de ellas sea FK. Lo que tú haces está mal y funciona en tu ejemplo porque Order_ID es único, pero no tiene que ser así.

#8 Tu ejemplo SI está mal

No ves que la tabla tiene una clave primaria formada por 2 columnas? Esto se da en multitud de ocasiones, por ejemplo en relaciones de muchos a muchos.

Y no, prepotente sería si me pegara el moco con algo, no con esto que es básico. Repito, tu ejemplo NO vale en este caso y si tú no usas claves primarias formadas por varias columnas es que te estás saltando las formas normales por la cara.

1 1 respuesta
eXtreM3

Soltrac repartiendo a diestro y siniestro...

Usuarios habituales

  • eXtreM3
  • Soltrac
  • TaiCHoKe
  • glolg
  • Gandalf530
  • Thanat0s