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

Relación entre tablas en MySQL

Estas en el tema de Relación entre tablas en MySQL en el foro de Bases de Datos General en Foros del Web. Saludos amigos foreros... Para el manejo del catálogo de un carro de compras en PHP he creado las siguiente tablas: Catalogo, con la siguiente estructura: ...
  #1 (permalink)  
Antiguo 16/12/2003, 09:24
Avatar de alexa10  
Fecha de Ingreso: julio-2002
Ubicación: De este lado...
Mensajes: 293
Antigüedad: 21 años, 9 meses
Puntos: 0
Relación entre tablas en MySQL

Saludos amigos foreros...

Para el manejo del catálogo de un carro de compras en PHP he creado las siguiente tablas:

Catalogo, con la siguiente estructura: id_articulo, stamp_articulo, stock_articulo, id_categoria, nombre_articulo, descrip_articulo, precio_articulo, ruta_imagen, ruta_thumb, label_articulo

Categorías, con la siguiente estructura: id_categoria, categoria_padre, nombre_categoria, ruta_titulo, ruta_imagen

El problema es que necesito que si elimino una categoría, se eliminen todos los artículos contenidos en dicha categoría. Para realizar la relación entre ambas tablas, utilizo id_categoria.

Este es el código, para generar las tablas:
DROP TABLE IF EXISTS catalogo;
CREATE TABLE catalogo (
id_articulo smallint(6) NOT NULL auto_increment,
stamp_articulo bigint(20) NOT NULL default '0',
stock_articulo varchar(20) default NULL,
id_categoria smallint(6) default NULL,
nombre_articulo varchar(60) NOT NULL default '',
descrip_articulo text NOT NULL,
precio_articulo decimal(12,2) NOT NULL default '0.00',
ruta_imagen varchar(254) default NULL,
ruta_thumb varchar(254) default NULL,
label_articulo varchar(10) NOT NULL default 'OPEN',
PRIMARY KEY (id_articulo);
)TYPE=InnoDB;

DROP TABLE IF EXISTS categorias;
CREATE TABLE categorias (
id_categoria smallint(6) NOT NULL auto_increment,
categoria_padre smallint(6) NOT NULL default '0',
nombre_categoria varchar(50) NOT NULL,
ruta_titulo text default NULL,
ruta_imagen text default NULL,
PRIMARY KEY (id_categoria,categoria_padre),
FOREIGN KEY (id_categoria)
REFERENCES catalogo (id_categoria)
on delete cascade
on update cascade)TYPE=InnoDB;
INSERT INTO `categorias` (`id_categoria` , `categoria_padre` , `nombre_categoria` , `ruta_titulo` , `ruta_imagen` )
VALUES ('', '0', 'Categorías Principales', NULL , NULL
);

Entonces el MySQL me da el siguiente error:

Error
Los componentes adicionales para trabajar con tablas vinculadas fueron desactivados. Para saber porqué, dé clic aquí.

Cuando le doy click, aparece lo siguiente:

PMA Database ... no recibió el OK[ Documentación ]
Opciones de relación general Deshabilitado

Siguiendo ciertas instrucciones que estan en el link de documentacion, voy cambiando cosas, hasta el punto que me parece que dañe el MySQL .

Mi pregunta es: hay alguna forma más sencilla de utilizar tablas relacionales en MySQL?, o el único camino es el atolladero en el que estoy metida???

Cualquier luz que puedan darme con respecto a este asunto, estare muy agradecida...

Por cierto estos son lo datos del MySQL:
MySQL 3.23.54-nt ejecutándose en localhost como root@localhost



Espero haberme explicado con claridad...
  #2 (permalink)  
Antiguo 16/12/2003, 12:08
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 20 años, 6 meses
Puntos: 13
Por que eliminas y creas tablas???

Yo haria algo así (imaginando que lo que quiero es eliminar la categoria 2):

DELETE FROM Catalogo WHERE id_categoria = 2;
DELETE FROM Categorías WHERE id_categoria = 2;
  #3 (permalink)  
Antiguo 16/12/2003, 13:16
Avatar de alexa10  
Fecha de Ingreso: julio-2002
Ubicación: De este lado...
Mensajes: 293
Antigüedad: 21 años, 9 meses
Puntos: 0
Gracias por contestar...

Mi problema no es eliminar registros de la tabla, el problema es que quiero que borre en cascada.

Por ejemplo si quiero borrar una categoría de la tabla categorias, quiero que se borren (automaticamente) todos los artículos que pertenezcan a dicha categoría.

Se que eso debo hacerlo relacionando las tablas, el problema es que no se hacerlo, he estado leyendo, para la verdad es que no termino de agarrarle la caida...

Si alguien más puede ayudarme...

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:46.