Base dados

asa_delta

Power Member
Boas

Estou a construir uma aplicação k utiliza, uma BD SQL server 2005, tenho uma duvida na construção da BD, quais as vantagens e desvantagens de se utilizar uma chave primária incremental?a BD fica mais rápida?

Obrigado
asa_delta
 
Boas!

Não se trata de rapidez mas sim de eficiência. Como deves saber, a chave primária garante a unicidade da linha e em alguns casos não consegues encontrar nada que garanta essa unicidade e nesses casos recorres a um identificador. Mais uma vez, como garantir que esse identificador é único? Tornando-o incremental, assim tens a certeza que em cada nova entrada na base de dados esse identificador será único pois será incrementado ao último existente.

Espero que te ajude :)

abraços, HecKel
 
Boas!

Boas!

Não se trata de rapidez mas sim de eficiência.

Penso que o que querias dizer é eficácia, ou seja, a característica que determina se algo é executado correctamente ou não.
De qualquer maneira, uma chave primária incremental pode de facto tornar as consultas mais eficientes, ou seja, pode tornar uma execução eficaz mais rápida (quando se fala de eficiência há o pressuposto que já é eficaz).
Isto acontece porque índices numéricos são mais simples e pequenos o que faz com que alguns SGBD's (por exemplo o MySQL com o engine InnoDB) executem as consultas sobre a tabela em causa mais rápidas.

Fiquem bem!
 
Boas!

Não se trata de rapidez mas sim de eficiência. Como deves saber, a chave primária garante a unicidade da linha e em alguns casos não consegues encontrar nada que garanta essa unicidade e nesses casos recorres a um identificador. Mais uma vez, como garantir que esse identificador é único? Tornando-o incremental, assim tens a certeza que em cada nova entrada na base de dados esse identificador será único pois será incrementado ao último existente.

Espero que te ajude :)

abraços, HecKel

Boas Heckel
Olha tou a fazer um trab em oracle e tou com 1 problem
na aplicaçao que vou fazer quando se regista um utilizador ou livro quero tipo que a chave primario, o codigo, seja adicionado automaticamente, tipo ver o codigo mais alto e esse+1.
Qual a melhor opçao pra fazer isto??? com um trigeer??? ou há mais simples?


abraço
 
Mais simples, um sequence ;)

Tens aqui uma forma detalhada..., mas a meu ver demasiado detalhada...

http://www.techonthenet.com/oracle/sequences.php

de qualquer das formas, aqui fica o código que eu uso :)

create sequence nome_da_sequencia start with 1 increment by 1
Depois só tens de fazer a chamada da sequência no devido lugar (não funciona em triggers) :)

:sequence.nome_da_sequencia.nextval

Por exemplo,
insert into tabela values(:sequence.nome_da_sequencia.nextval,outros campos, ...)

abraços, HecKel
 
Uma correcção podes preencher esse campo usando uma sequence dentro do trigger.

Dentro do trigger fazes:

select nome_da_sequencia.next_val into variavel from dual;

:new.valor = variavel;
 
Obrigado, eu tive problemas no meu trabalho à pala disso :P E não encontrei informação nenhuma sobre isso :(

De realçar que o dual é uma tabela virtual (se é que assim posso chamar) do Oracle usada para estes métodos.

abraços, HecKel
 
Basicamente dentro de um trigger podes fazer qualquer coisa desde que não seja chamar algo que despolete uma acção recursiva sobre a mesma tabela.
 
Boas Heckel
Olha tou a fazer um trab em oracle e tou com 1 problem
na aplicaçao que vou fazer quando se regista um utilizador ou livro quero tipo que a chave primario, o codigo, seja adicionado automaticamente, tipo ver o codigo mais alto e esse+1.
Qual a melhor opçao pra fazer isto??? com um trigeer??? ou há mais simples?


abraço

Já agora acho que melhor que teres uma chave primária com uma sequencia, seria teres campos de controlo. Tipo um campo com a data de criação e um campo com a data de alteração da linha. Podes usar unique keys para garantires a integridade dos dados. Se achares que se torna lento. Podes sempre criar indíces sobre as tabelas para melhor a performance.
 
Já agora acho que melhor que teres uma chave primária com uma sequencia, seria teres campos de controlo. Tipo um campo com a data de criação e um campo com a data de alteração da linha. Podes usar unique keys para garantires a integridade dos dados. Se achares que se torna lento. Podes sempre criar indíces sobre as tabelas para melhor a performance.



boas
antes de mais obrigado pela ajuda de todos.já vi que existem varias soluçoes, mas a da sequence parece ser interessante e simples.
Ja agora essa questao dos indices eu ainda nao percebi muito bem isso do indice, podes dar me uma luz sff

abraço a todos
 
Back
Topo