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

relaciones entre tablas

Estas en el tema de relaciones entre tablas en el foro de Mysql en Foros del Web. estoy queriendo comprender el tema este de relaciones entre tablas pero estoy confuso.. tengo dos tablas categorias y subcategorias . osea que a 1 campo ...
  #1 (permalink)  
Antiguo 20/05/2009, 19:25
 
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 461
Antigüedad: 22 años, 3 meses
Puntos: 1
relaciones entre tablas

estoy queriendo comprender el tema este de relaciones entre tablas pero estoy confuso.. tengo dos tablas categorias y subcategorias . osea que a 1 campo de categorias puede tener varias subcategorias graficamente uso phpmyadmin

Código:
tabla categorias

id_cat (int)(primary)
categoria (varchar)(30)

tabla subcategorias

id_subcat(int)(primary)
id_cat(int)(FK) 
subcategorias(varchar)(30)
las tablas son del tipo innodb

vistas de relaciones en phpmyadmin



al ingresar registros a subcategorias por php me pone

Duplicate entry '1' for key 'id_cat'


osea si suponiendo que

id_cat de la categora hostelerias es 1

y tengo subcategorias dentro de hostelerias como:posadas, hoteles, cabañas
todos los id_cat dentro de subcategorias deberian corresponderles el 1 es asi?

estoy confuso alguien que pueda aclarme este tema
__________________
Marcelo Acampora
mi pagina web personal
www.destinitytravel.com
  #2 (permalink)  
Antiguo 21/05/2009, 06:13
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Respuesta: relaciones entre tablas

Hola, claro lo que tu tiene es una relacion de 1 a n entre categorias y subcategorias, es decir que una categoria puede tener mas de una subcategoria:
Las tablas quedarian:
Código:
CREATE  TABLE IF NOT EXISTS `categoria` (
  `id_categoria` INT NOT NULL AUTO_INCREMENT ,
  `nombre` VARCHAR(45) NULL ,
  PRIMARY KEY (`id_categoria`) )
ENGINE = InnoDB

CREATE  TABLE IF NOT EXISTS `subcategoria` (
  `id_subcategoria` INT NOT NULL AUTO_INCREMENT ,
  `nombre` VARCHAR(45) NOT NULL ,
  `id_categoria` INT NOT NULL ,
  PRIMARY KEY (`id_subcategoria`) ,
  INDEX `fk_subcategoria_categoria` (`id_categoria` ASC) ,
  CONSTRAINT `fk_subcategoria_categoria`
    FOREIGN KEY (`id_categoria` )
    REFERENCES `categoria` (`id_categoria` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
Por ejemplo:
Tabla categoria:
id_categoria 1
id_categoria 2

Tabla subcategoria quedaria asi:

id_subcategoria1 , id_categoria 1, nombre_subcategoria
id_subcategoria2 , id_categoria 1, nombre_subcategoria
id_subcategoria3 , id_categoria 2, nombre_subcategoria

Esto implica que la categoria 1 tiene las subcategorias 1 y 2.
Y la categoria 2 tiene la subcategoria 3.

Espero que te sirva.

Saludos
__________________
->Aprender es un proceso que incluye el error..
  #3 (permalink)  
Antiguo 21/05/2009, 08:06
 
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 461
Antigüedad: 22 años, 3 meses
Puntos: 1
Respuesta: relaciones entre tablas

gracias por tu respuesta . creo haberlo solucionado colocandole a id_cat en tabla subcategoria como index, lo probe insertando campos y funciono , anteriormente lo tenia como unique
te aclaro que mis conocimientos de mysql son basicos y uso phpmyadmin para crear insertar etc
__________________
Marcelo Acampora
mi pagina web personal
www.destinitytravel.com
  #4 (permalink)  
Antiguo 21/05/2009, 08:19
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Respuesta: relaciones entre tablas

Holas marcinf2 quizas esto te sirva workbench
con esta herramientas puedes crear tus bases de datos, tablas, relaciones etc, es muy facil de utilizar y luego puedes generar el codigo sql de los scripts, entonces desde la pestaña sql del phpmyadmin lo pegas o lo importas y listo.

Saludos.
__________________
->Aprender es un proceso que incluye el error..
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 12:40.