Relacionamento de Tabelas

5 respostas
G

Pessoal é o seguinte, fiz uma aplicaçao quem tem duas tabelas (fornecedor, produto), com as estruturas abaixo:

CREATE TABLE fornecedor(  
          id int(10) unsigned NOT NULL AUTO_INCREMENT,  
          nome varchar(50) NOT NULL,  
          cnpj long  NOT NULL,  
          email varchar(50) NOT NULL,  
          telefone varchar(20) NOT NULL,  
          PRIMARY KEY (id));  
      
    CREATE TABLE produto (  
      id int(10) unsigned NOT NULL AUTO_INCREMENT,  
      nome varchar(50) NOT NULL,  
      marca varchar(50) NOT NULL,  
      quantidadetotal int(10) unsigned DEFAULT NULL,  
      preco float NOT NULL,  
      idFornecedor int(10) unsigned NOT NULL,  
      PRIMARY KEY (id),  
      KEY fk_produto_fornecedor (idFornecedor),  
      CONSTRAINT fk_produto_fornecedor FOREIGN KEY (idFornecedor) REFERENCES fornecedor (id));

Quero fazer uma implementaçao, onde terei que criar uma nova tabela que seria notafiscal, como faço o relacionamento dessa tabela com as outras duas?para que eu consiga gravar nessa tabela(notafiscal) os id do forncedor e produto? assim com fiz na tabela produto onde consigo pegar o id do forncedor.

Att

5 Respostas

wbdsjunior

se entendi o que você quer, você não precisa do id do fornecedor na notafiscal, já que o produto tem esse id. você precisa apenas de uma tabela de ligação da nota com o produto, já que a relação é n para n (um produto pode estar em várias notas fiscais e uma nota fiscal pode ter vários produtos).

create table notafiscal (
  id... ,
  cnpj ...,
  dataEmissao ...,
  desconto ..., -- você pode querer dar desconto no valor total
  primary key (id));

create table item ( --  a nota fiscal tem itens
  idNotaFiscal ...,
  idProduto ...,
  quantidade ...,
  precoUnitario ..., -- o preço do produto pode mudar/aumentar, então você copia o valor para do produto para o item
  desconto ..., -- você pode querer dar desconto apenas em um produto
  primary key (idNotaFiscal, idProduto));

depois se você quiser achar os fornecedores do produtos da nota fiscal, faça um join.

select fornecedor.*, produto.*
  from fornecedor
  join produto
    on fornecedor.id = produto.idFornecedor
  join item
    on produto.id = item.idProduto
  join notafiscal
    on item.idNotaFiscal = notafiscal.id
 where notafiscal.id = ?
G

Cara oque eu preciso é, na minha aplicaçao quando eu for fazer uma nota fiscal no formulario ai vou colocar a data, preço, ai vou ter um comb onde vou selecionar o fornecedor (dos que foram cadastrados) e outro comb onde vou selecionar o produto(dos que foram cadastrados) ai minha duvida é de como vou setar os id do fornecedor e produto na tabela da nota fiscal.

wbdsjunior

desktop ou web?

G

Web

wbdsjunior
gust:
Web
está usando algum framework?

vou repetir: você não precisa do fornecedor na nota fiscal. o produto deve saber a qual fornecedor pertence.

dito isso, basicamente, basta pegar o valor do select no Servlet usando request.getParameter() e convertendo o valor para inteiro (ou long), mais ou menos assim:

jsp:

<select name="fornecedor">
    <option value="3">3M</option> <!-- onde value é o id do fornecedor -->
    <option value="10">Tigre</option>
</select>

<!-- supondo que você escolheu Tigre no select de fornecedor... -->

<select name="produto">
    <option value="102">Tubo</option> <!-- onde value é o id do produto que sabe a qual fornecedor pertence -->
    <option value="333">Conexão</option>
</select>

<input type="text" name="valorUnitario" />

<input type="text" name="quantidade" />
servlet:
int produto = Integer.parseInt(request.getParameter("produto")); // o id do produto selecionado
double valorUnitario = Double.parseDouble(request.getParameter("valorUnitario"));
int quantidade = Integer.parseInt(request.getParameter("quantidade"));

NotaFiscal nf = new NotaFiscal();
nf.addItem(new Item(produto, valorUnitario, quantidade));

// supondo que você esteja utilizando o padrão DAO
new NotaFiscalDAO.inserirNotaFiscal(nf);
Criado 4 de novembro de 2011
Ultima resposta 6 de nov. de 2011
Respostas 5
Participantes 2