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

enlazar tablas

Estas en el tema de enlazar tablas en el foro de Bases de Datos General en Foros del Web. Amigos tengo una pregunta... tengo actualmente un abase de datos funcional en la cual agrego productos según categorías, funciona la aplicación sin inconvenitenes. Mi duda ...
  #1 (permalink)  
Antiguo 13/02/2010, 11:54
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 2
enlazar tablas

Amigos tengo una pregunta... tengo actualmente un abase de datos funcional en la cual agrego productos según categorías, funciona la aplicación sin inconvenitenes.

Mi duda es que ahora necesito que estos productos sean agregados a una Categoría luego a una Subcategoría quería consultar si la base de datos que hay a acontinuación está bien o no.

CREATE TABLE `categoria` (
`id_cat` int(11) NOT NULL auto_increment,
`cat_nombre` varchar(50) NOT NULL,
`cat_descripcion` longtext NOT NULL,
`cat_img` longtext NOT NULL,
PRIMARY KEY (`id_cat`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `subcategoria` (
`id_sub` int(11) NOT NULL auto_increment,
`subcat_nombre` varchar(50) NOT NULL,
`subcat_descripcion` longtext NOT NULL,
`categoria` int(11) NOT NULL,
PRIMARY KEY (`id_sub`),
KEY `categoria` (`categoria`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `producto` (
`id_prod` int(11) NOT NULL auto_increment,
`nombre_prod` varchar(100) NOT NULL,
`descripcion_prod` longtext NOT NULL,
`img_prod` longtext NOT NULL,
`categoria` int(11) NOT NULL,
`subcategoria` int(11) NOT NULL,
PRIMARY KEY (`id_prod`),
KEY `categoria` (`categoria`),
KEY `subcategoria` (`subcategoria`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Si esta bien tengo la duda como enlazar las bases de datos (alter table)... tengo que nelazar la base de datos de la siguiente forma.

tabla productos : se debe enlazar a subcategorias y categorias
tabla subcategorias: se debe enlazar a categorias..

¿la tabla productos debe enlazarse a subcategorias y categorias o solamente se puede enlazar a subcategorias?

muchas gracias por todo como siempre.--
  #2 (permalink)  
Antiguo 13/02/2010, 12:43
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, 5 meses
Puntos: 2658
Respuesta: enlazar tablas

Estás creando la base de datos usando tablas MyISAM. Las tablas MyISAM no tienen restricciones de FOREIGN KEY, por lo tanto no pueden controlar por sí mismas la integridad referencial (lo que tu estás llamando "enlazar").
Con ese motor de tablas debes manejarlo por tí, controlando la integridad de datos en la aplicación. No hay otra con las MyISAM.
Si quieres tener integridad referencial administrada por el DBMS, debes usar tablas InnoDB.

Cita:
¿la tabla productos debe enlazarse a subcategorias y categorias o solamente se puede enlazar a subcategorias?
- Si no hay productos que no pertenezcan a una subcategoría, entonces sólo debe haber una relación entre el producto y la subcategoría.
- Si hay productos que no pertenezcan a una subcategoría, entonces necesitarás o una FK qu epueda ser NULL o bien tendrás que manejar las tablas de otra forma.
- Si un producto puede estar en más de una subcategoría, necesitas una tabla para relacionarlas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/02/2010 a las 12:51
  #3 (permalink)  
Antiguo 13/02/2010, 12:51
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: enlazar tablas

OK ya lo cambie a innoDB, ahora como puedo enlazar los datos para que cuando agrege un poducto se pueda enlazar a la subcategoría y luego categoría.-
  #4 (permalink)  
Antiguo 13/02/2010, 13:26
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, 5 meses
Puntos: 2658
Respuesta: enlazar tablas

Algo así si quieres hacerlo mientras creas las tables:

Código MySQL:
Ver original
  1. CREATE TABLE  `categoria` (
  2.   `cat_nombre` varchar(50) NOT NULL,
  3.   `cat_descripcion` longtext NOT NULL,
  4.   `cat_img` longtext NOT NULL,
  5.   PRIMARY KEY  (`id_cat`)
  6.  
  7. CREATE TABLE  `subcategoria` (
  8.   `subcat_nombre` varchar(50) NOT NULL,
  9.   `subcat_descripcion` longtext NOT NULL,
  10.   `id_cat` int(10) unsigned NOT NULL,
  11.   PRIMARY KEY  (`id_sub`),
  12.   KEY `categoria` USING BTREE (`id_cat`),
  13.   CONSTRAINT `FK_subcategoria_cat` FOREIGN KEY (`id_cat`) REFERENCES `categoria` (`id_cat`) ON DELETE CASCADE ON UPDATE CASCADE
  14.  
  15. CREATE TABLE  `producto` (
  16.   `id_prod` int(10) unsigned NOT NULL auto_increment,
  17.   `nombre_prod` varchar(100) NOT NULL,
  18.   `descripcion_prod` longtext NOT NULL,
  19.   `img_prod` longtext NOT NULL,
  20.   `id_cat` int(10) unsigned NOT NULL,
  21.   `id_sub` int(10) unsigned NOT NULL,
  22.   PRIMARY KEY  (`id_prod`),
  23.   KEY `categoria` USING BTREE (`id_cat`),
  24.   KEY `subcategoria` USING BTREE (`id_sub`),
  25.   CONSTRAINT `FK_producto_subcat` FOREIGN KEY (`id_sub`) REFERENCES `subcategoria` (`id_sub`)  ON DELETE CASCADE ON UPDATE CASCADE,
  26.   CONSTRAINT `FK_producto_cat` FOREIGN KEY (`id_cat`) REFERENCES `categoria` (`id_cat`) ON DELETE CASCADE ON UPDATE CASCADE
__________________
¿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 13/02/2010, 13:38
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: enlazar tablas

OK gnzsoloyo, muchas gracias lo intentaré con mi código PHP, despues quizas me pase a ese foro para realizar preguntas...

entonces al momento de ingresar un producto estará en la subgcategoria del producto y a la categoría del producto verdad..

Mi pregunta es el insert se hace normalmente o no?
  #6 (permalink)  
Antiguo 13/02/2010, 13:47
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, 5 meses
Puntos: 2658
Respuesta: enlazar tablas

Los INSERT se tienen que hacer en secuencia:
Primero en la tabla primaria (la que no posee FK): CATEGORIA.
Luego en la secundaria (depende de otra): SUBCATEGORIA
Finalmente las de tercer nivel (depende de las dos): PRODUCTO.

El DBMS valida las FK en el mismo momento de hace rel INSERT, por lo que cada registro con FK tiene que contener un valor que exista en la tabla referenciada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 13/02/2010, 13:48
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, 5 meses
Puntos: 2658
Respuesta: enlazar tablas

Recuerda también que en este caso, eliminar un registro de la tabla primaria hara borrar todos los registros dependientes de su clave en las otras dos tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 13/02/2010, 13:49
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: enlazar tablas

ok gnzsoloyo muchas gracias por todo... realizaré las pruebas y te comento....



Estoy haciendo un sistema de catalogo de productos... cuando lo termine lo compartiré con la sociedad... para poder optimizarlo y agregar convertirla en modular.

Saludos.-

Etiquetas: enlazar, tablas
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 17:46.