CREATE TABLE inventory (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  available INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id)
);

CREATE TABLE items (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  descr VARCHAR(45) NOT NULL,
  PRIMARY KEY(id),
  UNIQUE INDEX unique_descr(descr)
);

CREATE TABLE attr (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  attr VARCHAR(45) NOT NULL,
  PRIMARY KEY(id),
  UNIQUE INDEX item_attr_possible_index1205(attr)
);

CREATE TABLE attr_values (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  attr_id INTEGER UNSIGNED NOT NULL,
  value VARCHAR(45) NOT NULL,
  PRIMARY KEY(id),
  UNIQUE INDEX attr_values_possible_index1213(attr_id, value)
);

CREATE TABLE item_attr_map (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  items_id INTEGER UNSIGNED NOT NULL,
  attr_id INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id),
  INDEX item_attr_map_FKIndex1(attr_id),
  INDEX item_attr_map_FKIndex2(items_id),
  FOREIGN KEY(attr_id)
    REFERENCES attr(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(items_id)
    REFERENCES items(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

CREATE TABLE item_attr_value_map (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  items_id INTEGER UNSIGNED NOT NULL,
  attr_id INTEGER UNSIGNED NOT NULL,
  attr_values_id INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id),
  INDEX item_attr_value_map_FKIndex1(attr_values_id),
  INDEX item_attr_value_map_FKIndex2(attr_id),
  INDEX item_attr_value_map_FKIndex3(items_id),
  FOREIGN KEY(attr_values_id)
    REFERENCES attr_values(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(attr_id)
    REFERENCES attr(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(items_id)
    REFERENCES items(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

CREATE TABLE item_inventory_map (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  attr_values_id INTEGER UNSIGNED NOT NULL,
  attr_id INTEGER UNSIGNED NOT NULL,
  items_id INTEGER UNSIGNED NOT NULL,
  inventory_id INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id),
  UNIQUE INDEX item_inventory_map_index1236(inventory_id),
  INDEX item_inventory_map_FKIndex1(items_id),
  INDEX item_inventory_map_FKIndex2(inventory_id),
  INDEX item_inventory_map_FKIndex3(attr_id),
  INDEX item_inventory_map_FKIndex4(attr_values_id),
  FOREIGN KEY(items_id)
    REFERENCES items(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(inventory_id)
    REFERENCES inventory(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(attr_id)
    REFERENCES attr(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
  FOREIGN KEY(attr_values_id)
    REFERENCES attr_values(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);



