Ir ao conteúdo
  • Cadastre-se

Modelando o Banco


paulinho2mg

Posts recomendados

Boa noite!

 

  Tenho que Criar um Banco para uma aplicação que tem por fim gerir a locacao de Tendas, 

 

 Uma tenda completa e constituidas de vários componentes (pés, laterais, suporte da lona, lona, coroa), e dependendo do tamanho outros componentes sao necessarios (tendas grandes tem componentes como treliça travantes, e canos travantes).

 

quando o cliente loca uma tenda mensalmente por exemplo, pode acontecer de ter que substituir algum componente (um pé amassado por exemplo) que será cobrado ou não. Logo meu banco de dados devera ter armazenado todos esses componentes separadamente, para que possar ser gerado a ordem de serviço de locacao ou substituicão. Igual um computador que pode ser vendido completo ou com componentes separados.

 

minha duvida é se para cada componente eu tenho que criar uma tabela?

 

Se puderem me ajudar, sou iniciante, e necessito de um auxilio

 

obrigado 

 

aguardo resposta

Link para o comentário
Compartilhar em outros sites

  • Moderador

Olá,

 

Não. não é necessário criar uma tabela para cada componente.

 

Basicamente, você terá:

Uma entidade para o produto(tendas), onde nela possui os dados referente ao produto em si.

Uma entidade para os componentes, onde onde nela possui apenas o ID e o nome do componente.

 

A partir destas duas entidades, poderá formar um relacionamento 1:N, onde  uma tenda pode ser constituída por 'N' componentes

 

 

Sugestão: instale o Mysql workbench   que serve para modelar o banco de dados.  tente seguir esta lógica...  Obviamente esta é só uma parte do seu banco.. ainda precisas pensar nas outras entidades do seu banco.

 

Att,

 

Dif

Link para o comentário
Compartilhar em outros sites

sim entendi, porém alguns desses componentes tem particularidades que devem ser especificadas

 

por exemplo os componentes feitos de ferro (pés, laterais, coroas) não tem cor, já as lonas tem um atributo cor que deve ser levado em conta. Sem contar que o Componente "Lona" deverá ter um atributo de status para saber se ela está suja, molhada, ou estragada. e pela lógica de negocio é um atributo que deve ser armazenado separado, esse atributo para você entender melhor será da seguinte forma

 

assim, eu crio esses atributos específicos na tabela Componente?

Link para o comentário
Compartilhar em outros sites

  • Moderador
Então,  como havia explicado no post anterior(#2)..
 
Partindo de que já tens a tabela tendas e tabela componentes... pensa na seguinte situação:
 
Como os componentes possuem suas próprias características ... neste caso você pode criar uma tabela chamada de detalhes_componentes, por exemplo.
 
Esta tabela recebe os atributos: ID(auto increment), ID_componente, cor, estado e material(todos como INT pois serão chaves estrangeiras) 
 
Feito isso, é preciso utilizar a 2 norma formal, e criar  mais 3 tabelas, respectivamente uma para cada chave estrangeira da tabela detalhes_componentes.
 
Coonsulta usada para gerar o resultado da imagem 2
SELECT 	componentes.componente,	cores.cor,	estado.estado,	material.materialFROM detalhes_componentesINNER JOIN componentes ON componentes.ID_componente = detalhes_componentes.ID_componenteINNER JOIN cores ON cores.ID_cor = detalhes_componentes.corINNER JOIN estado ON estado.ID_estado = detalhes_componentes.estadoINNER JOIN material ON material.ID_material = detalhes_componentes.material

Devo lembrar que esta seria só uma fração do seu banco... pois ainda necessitaria acrescentar as tabelas responsáveis pelo controle dos alugueis,  clientes, ordens de serviço.. valores..  se houver.. 

 

post-386885-0-38663600-1389938546_thumb.

post-386885-0-86978700-1389938559_thumb.

Link para o comentário
Compartilhar em outros sites

Dif, esse não é o único problema que tenho, a Entidade Tenda só e somente só irá existir caso possua disponiveis todas os seus componentes, então, fazendo o relacionamento entre a Tabela Tenda e a tabela componentes que já tenho, a dificuldade está em criar a Entidade tenda com todos os seus componentes...

 

eu pensei em fazer assim, criar a tabela tenda com atributos do tipo int contendo  FK's em sequencia dos componentes comuns que contenha em todos os tipos de tendas, e uma FK para uma outra tabela que vai conter as ID's dos componentes das tendas diferentes (no caso as maiores).

 

essa situação é mais ou menos semelhante com uma compra de certos tipos de produtos, aonde posso comprar tanto um produto só ou vários, e isso, me desculpe eu não sei. 

 

vou colocar em anexo uma tabelinha pra você entender melhor o que estou tentando dizer.

 

ah! eu sou iniciante em banco de dados, tenha paciência comigo, obrigado.

 

abraço

 

 

post-544579-0-38054100-1390078489_thumb.

Link para o comentário
Compartilhar em outros sites

  • Moderador

2@, entendi a situação agora.

 

 então, baseado no que postou...  você pode criar uma entidade N:N , que em uma analogia, seria a tabela Itens_vendas  onde contem  qual item está comprando, a quantidade dela.. e etc.

 

no seu caso criaria uma tabela N:N entre a tabela que possui o nome das tendas e componentes... (tabelas N:N só contém valores INT  a maioria chave estrangeiras) 

Link para o comentário
Compartilhar em outros sites

  • Moderador

Olha...  a principio...  está OK...  mas em hipótese alguma use small int para campos auto increment.

 

recomendo alterar todos os small int por   apenas INT.. ou se quiser especificar a quantidade de casas podes fazer: INT(11)   

* o número "onze" representa que o campo será do tipo INT com 11 dígitos.

 

 

Agora, tenta cadastrar duas ou mais tendas distintas

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Ola @dif gostaria que desse uma olhada em meu banco de dados, a minha tabela COMPONENTES (atualizada para ITENS) está gerando uma erro :

Executing SQL script in serverERROR: Error 1005: Can't create table 'Atenda.ITENS' (errno: 121)CREATE  TABLE IF NOT EXISTS `Atenda`.`ITENS` (  `idITEM` INT(11) NOT NULL ,  `TIPO_ITENS_idTIPO` INT(11) NOT NULL ,  `tamanhoITEM` SMALLINT(6) NOT NULL ,  `STATUS_idSTATUS` INT(11) NOT NULL ,  `DETALHES_ITEM_idDETALHES_ITEM` INT(11) NULL DEFAULT NULL ,  PRIMARY KEY (`idITEM`) ,  INDEX `fk_COMPONENTES_STATUS1` (`STATUS_idSTATUS` ASC) ,  INDEX `fk_ITENS_DETALHES_ITEM1` (`DETALHES_ITEM_idDETALHES_ITEM` ASC) ,  INDEX `fk_ITENS_TIPO_ITENS1` (`TIPO_ITENS_idTIPO` ASC) ,  CONSTRAINT `fk_COMPONENTES_STATUS1`    FOREIGN KEY (`STATUS_idSTATUS` )    REFERENCES `Atenda`.`STATUS` (`idSTATUS` )    ON DELETE NO ACTION    ON UPDATE NO ACTION,  CONSTRAINT `fk_ITENS_DETALHES_ITEM1`    FOREIGN KEY (`DETALHES_ITEM_idDETALHES_ITEM` )    REFERENCES `Atenda`.`DETALHES_ITEM` (`idDETALHES_ITEM` )    ON DELETE NO ACTION    ON UPDATE NO ACTION,  CONSTRAINT `fk_ITENS_TIPO_ITENS1`    FOREIGN KEY (`TIPO_ITENS_idTIPO` )    REFERENCES `Atenda`.`TIPO_ITENS` (`idTIPO` )    ON DELETE NO ACTION    ON UPDATE NO ACTION)ENGINE = InnoDBDEFAULT CHARACTER SET = latin1COLLATE = latin1_swedish_ciSQL script execution finished: statements: 3 succeeded, 1 failed

segue em anexo o modelo do banco! 

Lembrando, ainda não está acabado, e sujeito a muitas alterações

 

Obrigado!

post-544579-0-19049200-1390859218_thumb.

Link para o comentário
Compartilhar em outros sites

  • Moderador

Olá,

 

Provavelmente você tem uma foreign key  em duplicidade.. é o errno 121

não tenho certeza, mas pode ser o TIPO_ITENS_idTIPO.  seu print nao teve muita utilidade.. recomendo que poste outra, mas oculte os recursos humanos, e expanda aquelas que ficou oculta.

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...