Buenas nuevamente Hiruma-Sama, veamos lo siguiente:
- Si cada usuario unicamente va a tener una y solo una mochila la relacion quedaria de la siguiente manera:
Suponiendo que la base de datos se llame prueba.
Código:
CREATE SCHEMA IF NOT EXISTS `prueba` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `prueba`;
-- -----------------------------------------------------
-- Table `prueba`.`usuario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `prueba`.`usuario` (
`id_usuario` INT NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(45) NOT NULL ,
`password` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id_usuario`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `prueba`.`item`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `prueba`.`item` (
`id_item` INT NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(45) NOT NULL ,
`descripcion` VARCHAR(45) NULL ,
PRIMARY KEY (`id_item`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `prueba`.`mochila`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `prueba`.`mochila` (
`id_usuario` INT NOT NULL ,
`id_item` INT NOT NULL ,
`cantidad` INT NULL ,
PRIMARY KEY (`id_usuario`, `id_item`) ,
INDEX `fk_usuario_has_item_usuario` (`id_usuario` ASC) ,
INDEX `fk_usuario_has_item_item` (`id_item` ASC) ,
CONSTRAINT `fk_usuario_has_item_usuario`
FOREIGN KEY (`id_usuario` )
REFERENCES `prueba`.`usuario` (`id_usuario` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_usuario_has_item_item`
FOREIGN KEY (`id_item` )
REFERENCES `prueba`.`item` (`id_item` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
De esta manera cada usuario tiene una sola mochila en la que puede ir añadiendo los items que desee y asegurando que el mismo no se repita. Si te fijas quite como clave primaria el id_mochila porque eso permitiria que un usuario puediese tener mas de una mochila.
- Ahora si cada usuario puede tener mas de una mochila, entonces la relacion quedaria de la siguiente manera:
Código:
CREATE SCHEMA IF NOT EXISTS `prueba` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `prueba`;
-- -----------------------------------------------------
-- Table `prueba`.`usuario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `prueba`.`usuario` (
`id_usuario` INT NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(45) NOT NULL ,
`password` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id_usuario`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `prueba`.`item`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `prueba`.`item` (
`id_item` INT NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(45) NOT NULL ,
`descripcion` VARCHAR(45) NULL ,
PRIMARY KEY (`id_item`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `prueba`.`mochila`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `prueba`.`mochila` (
`id_mochila` INT NOT NULL AUTO_INCREMENT ,
`id_usuario` INT NOT NULL ,
`id_item` INT NOT NULL ,
`cantidad` INT NULL ,
PRIMARY KEY (`id_mochila`, `id_usuario`, `id_item`) ,
INDEX `fk_usuario_has_item_usuario` (`id_usuario` ASC) ,
INDEX `fk_usuario_has_item_item` (`id_item` ASC) ,
CONSTRAINT `fk_usuario_has_item_usuario`
FOREIGN KEY (`id_usuario` )
REFERENCES `prueba`.`usuario` (`id_usuario` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_usuario_has_item_item`
FOREIGN KEY (`id_item` )
REFERENCES `prueba`.`item` (`id_item` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Espero que te sirva.
Saludos