Ir para conteúdo
Renato Muniz

Melhor prática? criam campo Total ou fazer um join sum()?

Recommended Posts

Olá pessoal , sempre nas minhas tabelas nunca criei campo Total, nos casos tipo... tabela_venda e tabela_pedidos, o que eu faço é um join somando os campos valor*quantidade

daí é criado um campo "temporario" (Total)... correto?? pois bem, agora programando em java (spring) + JPA me deparei com problemas na hora de criar minhas classes anotadas como @Entity, pois esse campo "temporario" ta difícil de manipular na classe, pois na hora de persistir no banco ele o "JPA" tenta gravar esse campo "Total" tbm. Existe uma tag @transient  que inibe essa persistência no banco, ele retira da serialização, porém tbm nao consigo visualizar o conteúdo dele na view (no HTML), ou seja, ele nao carrega nos métodos get() vem sempre null!!

sei aqui é relacionado a banco de dados e acabei falando mais da linguagem do que o próprio banco, mas voltando ao assunto...

 

Vocês preferem criar o campo Total da tabela e assim ter a preocupação de sempre atualizar o campo ao incluir ou editar um valor da tabela Pedidos , ou preferem fazer um JOIN executando um SUM(), dessa forma nao precisando se preocupar com atualizações na tabela Vendas????

 

Citação

Certamente com o Join perco um pouco de performance, ou outro lado tenho a preocupação de ta atualizando o campo (total)

 

com o zendFramework (PHP) eu nao tinha problema nenhuma fazia o que queria "mandava e desmandava" :D  mas no "Spring" a coisa mudou!!

 

Qual a preferencia de vcs!! ??

 

obrigado!

Renato Muniz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que no seu caso seja melhor o campo Total, com mais fácil manipulação

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, AmaandaSantos3 disse:

Acredito que no seu caso seja melhor o campo Total, com mais fácil manipulação

 

Obg por responder Amaanda, acho q assim seria mais complicado de manter nao?? me preocupar em atualiza o campo total , sempre que houver um insert ou update na tabela de produtos, apesar que na classe entity tem as tags preupdate e preinsert dai eu poderia tentar calcular e etc... mas da forma q implementei ficaria ruim dessa forma.

Obg

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 hours ago, Renato Muniz said:

 

Obg por responder Amaanda, acho q assim seria mais complicado de manter nao?? me preocupar em atualiza o campo total , sempre que houver um insert ou update na tabela de produtos, apesar que na classe entity tem as tags preupdate e preinsert dai eu poderia tentar calcular e etc... mas da forma q implementei ficaria ruim dessa forma.

Obg

 

Eu pensei nessa forma, porque você pode perder esse dado com esse campo temporário, se seu sistema crescer, então uma forma de não perder esse dado seria criar ele real, mas aí se for uma coisa pequena usa o sum(), faz um teste com os dois, o que ficar melhor na sua necessidade usa, eu faço isso sempre, ajuda a saber o que realmente necessita 

 

Ps... Pesquisa mais sobre campos temporários e tabelas temporárias, que você pode achar um jeito de não perder esse dado, e usar o sum(), mas faz o teste que te falei ... :3 

Compartilhar este post


Link para o post
Compartilhar em outros sites
18 horas atrás, AmaandaSantos3 disse:

Acredito que no seu caso seja melhor o campo Total, com mais fácil manipulação

Oi Amanda, consegui contornar separando as tabelas mesmo, tirei o join da tabela "PAI" e fiz um filtro separado com a tabela "FILHA"

daí no controller deu FOR ( entity) somando manualmente e depois dei um setTotal() e enviei pra View. o que mudou pra ficar mais pesado é quantidade de vezes que preciso ir no banco de dados, com o join era uma instrução só!!

por enquanto vou deixar assim, pra dar continuidade no projeto, mas depois vou melhorar esse trecho!!

Obg!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Victor Cometti
      Boa noite,
       
      Em algumas de minhas queries de insert eu atualizo quando encontro registro duplicado.
      insert into .... ON DUPLICATE KEY UPDATE ...... Só que descobrir que além de verificar a PRIMARY KEY ele verifica também campos UNIQUE (um ou outro).
      O interessante para mim seria que fizesse update só quando achasse a PRIMARY KEY duplicada e não o campo UNIQUE.
      É possível sem procedure? 
       
    • Por dungol
      Ola Pessoal,
      Comprei um script em php e Mysql e estou precisando de uma ajuda.
      É um script POS simples de vendas. Quando eu faço uma venda o recibo sai apenas o nome do cliente, o telefone e as informaçoes da compra, mas eu gostaria de adicionar neste recibo o endereço do cliente. Na tabela de compra já tem o campo endereço, mas eu não sei como fazer o script adicionar o endereço do cliente nessa  tabela. 
      Obrigada pela ajuda,
      Cristina
    • Por UPeralta
      Olá, preciso de ajuda. A minha função de fetch_object está acessando apenas a primeira linha do resultado da SELECT, mas a seleção está retornando duas linhas. Não sei o que eu estou fazendo errado.
      Class que está fazendo a consulta no banco de dados:
      <?php class permissao_grupo { //Variáveis referentes a colunas public $peg_codigo; public $peg_nome; //Variáveis padrão das classes public $con; public $sql; public $result; //Funções padrão para todas as classes public function __construct() { $this->con = new Conexao(); } public function fetch_object() { $this->result = $this->result->fetch_object(); foreach ($this->result AS $chave => $valor) { $this->$chave = $valor; } } public function num_rows() { return $this->result->num_rows; } //Funções da classe public function montaGrupoMenu() { $sql = "SELECT peg_codigo, peg_nome FROM permissao_grupo "; $this->result = $this->con->Executar($sql); return $this->result; } }  
      Class conexão
      <?php class Conexao { public $host = "localhost"; public $usuario = "root"; public $senha = ""; public $banco = "smart"; public $mysqli; public function __construct() { $this->Abrir(); } public function Abrir() { $this->mysqli = new mysqli(); $this->mysqli->connect($this->host, $this->usuario, $this->senha, $this->banco); } public function Fechar() { $mysqli->close(); } public function Executar($sql){ return $this->mysqli->query($sql); } public function fetch_object(){ print_r($this->mysqli->fetch_assoc()); } }  
      Alguém poderia me ajudar? Já tentei usar o fetch_assoc e o fetch_array para ver se funcionaria, mas também não deu certo.
    • Por Lucasw
      E aí pessoal, estou com um problema que me afrontou essa madrugada toda.
      Estou tentando duplicar valores de dentro de outro valor, porém na hora
      de duplicar eu não tenho conhecimento para um comando que crie novos IDS
      então, está dando erro a horas e eu em busca da solução.
      Podem me ajudar?
       
      INSERT INTO items_rooms (id, room_id, user_id)
      SELECT id, 15602, user_id
      FROM items_rooms WHERE room_id = '15601';
       
      (é onde está negrito que está o problema.)
       
      Bom dia a todos!
       
      CREATE TABLE `items_rooms` (
          `id` VARCHAR(23) NOT NULL,
          `user_id` INT(10) NOT NULL,
    • Por Marcones Borges
      Bom dia, esto tentando inserir dados de um formulário em duas tabelas ao mesmo tempo.
       
      Gostaria de sua ajuda!
       
      Arquivo Insere
       

      $conexao = conexao::getInstance();         // Recebe os dados enviados pela submissão         $acao  = (isset($_POST['acao'])) ? $_POST['acao'] : '';         $id    = (isset($_POST['id'])) ? $_POST['id'] : '';         $nome  = (isset($_POST['nome'])) ? $_POST['nome'] : '';         $funcao = (isset($_POST['funcao'])) ? $_POST['funcao'] : '';         $cpf   = (isset($_POST['cpf'])) ? str_replace(array('.','-'), '', $_POST['cpf']): '';         $status           = (isset($_POST['status'])) ? $_POST['status'] : '';   $sql = 'INSERT INTO historico (registro_ministro, descricao, data_registro, usuario )                VALUES(:registro_ministro, :descricao, :data_registro, :usuario )';                  $stm = $conexao->prepare($sql);             $stm->bindValue(':registro_ministro', $registro_ministro);             $stm->bindValue(':descricao', $descricao);             $stm->bindValue(':data_registro', $data_registro);             $stm->bindValue(':usuario', $usuario);             $retorno = $stm->execute();                          if ($retorno):                 echo "<div class='alert alert-success' role='alert'>Registro editado com sucesso, aguarde você está sendo redirecionado ...</div> ";             else:                 echo "<div class='alert alert-danger' role='alert'>Erro ao editar registro!</div> ";             endif;             echo "<meta http-equiv=refresh content='0;URL=ministros.php'>";         endif; $sql = 'INSERT INTO ministro (nome, cpf,  funcao, status )                VALUES(:nome, :cpf, :rg,  :funcao, :status, )';                                $stm = $conexao->prepare($sql);             $stm->bindValue(':nome', $nome);             $stm->bindValue(':cpf', $cpf);             $stm->bindValue(':status', $status);             $stm->bindValue(':funcao', $funcao);
       
      Porém só executa o ultimo código não executa o primeiro o que pode ser ?
       
×

Informação importante

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