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

Qué cosa más extraña

Estas en el tema de Qué cosa más extraña en el foro de Mysql en Foros del Web. He creado la siguiente tabla, en la que 'idMenu_2' es clave foránea de 'idMenu' en la misma tabla. Código: CREATE TABLE MENU ( idMenu INTEGER ...
  #1 (permalink)  
Antiguo 27/05/2008, 13:35
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Mensaje Qué cosa más extraña

He creado la siguiente tabla, en la que 'idMenu_2' es clave foránea de 'idMenu' en la misma tabla.

Código:
 CREATE TABLE MENU (
  idMenu      INTEGER      UNSIGNED NOT NULL,
  idMenu_2    INTEGER      UNSIGNED NOT NULL,
  titulo      VARCHAR(80)           NOT NULL,
  orden       TINYINT      UNSIGNED NOT NULL,
  destino     VARCHAR(155)          NOT NULL,
  CONSTRAINT pkMenu PRIMARY KEY(idMenu),
  CONSTRAINT fkMenuMenu FOREIGN KEY (idMenu_2) REFERENCES MENU (idMenu)	
)
TYPE=InnoDB;

El asunto es que tras un insert, no permite borrar el registro debido a la restricción de la clave foránea...

Código:
insert into menu values (1, 1, 'Idioma', 1, '' );	
delete from menu where idmenu=1; // error
Qué chapuza he hecho o cómo lo soluciono ??

Gracias
  #2 (permalink)  
Antiguo 27/05/2008, 14:03
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: Qué cosa más extraña

En buen problema te has metido:
Estas referenciando un registro a sí mismo como clave foránea.
Jamás te va a dejar eliminarlo, porque el mismo registro tiene la restricción para sí mismo.
Te comento:
- Cuando quieres referenciar un registro a sí mismo, en realidad lo que haces es generar otra tabla que contenga la vinculación, en este caso, lo que contendría sería la misma clave en dos campos, y en ambos como clave foránea y primaria a la vez (aunque la PK podría ser otra).
- Esto se hace precisamente porque de ese modo puedes: crear relaciones 1:N o N:N, mientras que la que has creado es 1:1, que en definitiva no sirve de nada; referenciar ese registro a otro, (cosa que ya no puedes porque el campo ya está ocupado y deberías borrar el contenido, pero una FK no puede ser NULL).

Solución:
1. Borra la referencia de la tabla (la FOREIGN KEY).
2. Crea una tabla de menues relacionados.
3. Asignale las referencias.
4. Borra el campo que usabas de FK, en ese contexto no se necesita ya que la consulta de quien con quien lo responde otra tabla.
__________________
¿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 27/05/2008, 14:07
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Respuesta: Qué cosa más extraña

Pues vaya nunca se me había dado este caso, muchas gracias por la aclaración !
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 08:16.