Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maykel-ctba

Duvida - Modelagem para produtos

Recommended Posts

Fala galera,

Estou com uma dúvida. Tenho um projeto de e-commerce para posters, e estou tendo dúvidas em como modelar o banco de dados para a parte dos produtos e suas variantes.

Explicarei:

  1. Cada produto tem X opções de acabamentos
  2. Cada produto tem X opções de medidas. Elas não tem um padrão.
  3. Cada produto tem X opções de molduras

E cada uma das variáveis destas combinações possui um valor que será posto manualmente.

O cadastro das opções de acabamento e de molduras será feito antes.

Exemplo:

Poster 01:

Acabamento Papel Fotográfico

47x36

Moldura em madeira simples

R$119

Poster 01:
Acabamento Couche
90x67
Sem moldura
R$ 299

A duvida é: Como posso fazer estas tabelas relacionadas (acabamento, tamanhos, preço), de forma que me atendam?

tbl_produtos:

  • proId (int 11 index)
  • proTitulo (varchar 255)
  • proAlias (varchar 255)
  • proCodigo (varchar 10)
  • proConteudo (text)
  • proTag (varchar 255)
  • proDataCadastro (datetime)
  • proOrdem (int 11)
  • proAtivo (enum 'S'/'N')
  • proExcluido (enum 'S'/'N')

tbl_acabamento

  • acaId (int 11 index)
  • acaTitulo (varchar 255)
  • acaDataCadastro (datetime)
  • acaAtivo (enum 'S'/'N')
  • acaExcluido (enum 'S'/'N')

tbl_moldura

  • molId (int 11 index)
  • molTitulo (varchar 255)
  • molDataCadastro (datetime)
  • molAtivo (enum 'S'/'N')
  • molExcluido (enum 'S'/'N')

Exemplo que o cliente mandou: http://www.urbanarts.com.br/folha-ac-25275/p?você=4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua Modelagem esta quase exata, porem falta uma tabela que sera a hasmany entre a tabela produto e seu atributos

e através dela que voce fara as ligações para as demais, fiz um exemplo basico para voce entender o fluxo

OCveBv5.png

a tbl_produto_grade que armazenara o id do produto + id da grade, desta forma com joins ou subselects voce monta a consulta, do mais é só definir as flags

code


-- -----------------------------------------------------
-- Table `mydb`.`tbl_produto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`tbl_produto` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`tbl_grade`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`tbl_grade` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`tbl_grade_variacao`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`tbl_grade_variacao` (
  `id` INT NOT NULL,
  `grade_id` INT NOT NULL,
  `nome` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`, `grade_id`),
  INDEX `fk_tbl_grade_variacao_tbl_grade1_idx` (`grade_id` ASC),
  CONSTRAINT `fk_tbl_grade_variacao_tbl_grade1`
    FOREIGN KEY (`grade_id`)
    REFERENCES `mydb`.`tbl_grade` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`tbl_produto_grade`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`tbl_produto_grade` (
  `grade_id` INT NOT NULL,
  `produto_id` INT NOT NULL,
  PRIMARY KEY (`grade_id`, `produto_id`),
  INDEX `fk_tbl_grade_has_tbl_produto_tbl_produto1_idx` (`produto_id` ASC),
  INDEX `fk_tbl_grade_has_tbl_produto_tbl_grade_idx` (`grade_id` ASC),
  CONSTRAINT `fk_tbl_grade_has_tbl_produto_tbl_grade`
    FOREIGN KEY (`grade_id`)
    REFERENCES `mydb`.`tbl_grade` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_tbl_grade_has_tbl_produto_tbl_produto1`
    FOREIGN KEY (`produto_id`)
    REFERENCES `mydb`.`tbl_produto` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;


ON DELETE CASCADE, deleta em caso de remoção, assim não fica orfão pelo caminho, só testar

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.