DB2 Auto gerado Coluna / prós e contras sempre gerou mais de sequência

StackOverflow https://stackoverflow.com/questions/1026936

  •  06-07-2019
  •  | 
  •  

Pergunta

No início estávamos usando ' sempre gerada ' para gerar os valores para uma chave primária. Mas agora é sugerido que deveríamos, em vez de usar 'sempre gerada', seqüência uso para preencher o valor da chave primária. O que você acha que pode ser a razão desta mudança? É isto apenas uma questão de escolha?

código anterior:

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER         NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE),
.
.
);

Agora é

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER ),
.
.
);

agora durante a inserção, para gerar o valor TAB_P através sequência.

Foi útil?

Solução

I tendem a usar colunas de identidade mais de seqüências, mas eu vou comparar os dois para você.

As seqüências podem gerar números para qualquer finalidade, enquanto uma coluna de identidade é estritamente ligado a uma coluna em uma tabela.

Uma vez que a seqüência é um objeto independente, pode gerar números para várias tabelas (ou qualquer outra coisa), e não é afetado quando qualquer tabela é descartado. Quando uma tabela com uma coluna de identidade é descartado, não há nenhuma memória do que o valor foi passado atribuído por essa coluna identidade.

A tabela pode ter apenas uma coluna de identidade, por isso, se você quer quer gravar vários números sequenciais em colunas diferentes na mesma mesa, objetos de seqüência pode lidar com isso.

O requisito mais comum para um gerador de números seqüenciais em um banco de dados é a de atribuir uma chave técnica para uma linha, que é bem tratado por uma coluna de identidade. Para mais complicadas necessidades número de geração, um objeto de seqüência oferece mais flexibilidade.

Outras dicas

Este provavelmente pode ser ids punho no caso de existirem muitas exclusões na tabela.

Por exemplo: Em caso de identidade, se os seus ids são 1 2 3

Agora, se você excluir ficha 3, sua tabela terá 1 2

E, em seguida, se o seu inserir um novo registro, os ids será 1 2 4

Em oposição a isso, se você não estiver usando uma coluna de identidade e estão gerando o id usando o código, em seguida, depois de exclusão para a nova inserção você pode calcular id como max (id) + 1, então os ids será em ordem 1 2 3

Eu não posso pensar em qualquer outra razão, por uma coluna de identidade não deve ser utilizado.

Aqui está algo que eu encontrei no site publib:

<> fortes Comparando colunas identidade e sequências

Enquanto existem semelhanças entre as colunas de identidade e de sequências, também existem diferenças. As características de cada pode ser usado quando projetar seu banco de dados e aplicações.

coluna Uma identidade tem as seguintes características:

  • Uma coluna de identidade pode ser definida como parte de uma tabela apenas quando a mesa é criado. Uma vez que a tabela é criada, você não pode alterá-lo para adicionar um coluna de identidade. (No entanto, existente características da coluna de identidade pode ser alterada.)
  • coluna Uma identidade gera automaticamente os valores para uma mesa única.
  • Quando uma identidade coluna é definida como GENERATED SEMPRE, os valores utilizados são sempre gerada pelo gerenciador de banco. Aplicações não estão autorizados a fornecer os seus próprios valores durante a modificação do conteúdo do mesa.

objecto sequência A tem as seguintes características:

  • Um objecto sequência é uma base de dados objeto que não está vinculado a qualquer um mesa.
  • objecto sequência A gera valores sequenciais que podem ser utilizados em qualquer instrução SQL ou XQuery.
  • Uma vez que um objeto de seqüência pode ser usado por qualquer aplicação, existem dois expressões usadas para controlar a recuperação do próximo valor na sequência especificada e o valor gerado anterior para a declaração sendo executado. O valor anterior expressão retorna o mais recentemente valor gerado para o especificado sequência de uma declaração anterior dentro da sessão atual. Nas próximas expressão de valor retorna o próximo valor para a sequência especificada. o uso dessas expressões permite que o mesmo valor a ser usado em vários instruções SQL e XQuery dentro várias mesas.

Enquanto estas não são todas as características desses dois itens, estas características irá ajudá-lo a determinar qual usar dependendo do seu design de banco de dados e os aplicativos usando o banco de dados.

Eu não sei por que alguém jamais usaria uma coluna de identidade em vez de uma seqüência. Sequências de realizar a mesma coisa e são muito mais para a frente. Colunas de identidade são muito mais de uma dor, especialmente quando você quer fazer descarrega e cargas de dados para outros ambientes. Eu não vou entrar em todas as diferenças como essas informações podem ser encontradas nos manuais, mas posso dizer-lhe que do DBA tem que começar quase sempre a qualquer hora envolver um usuário quer dados migrar de um ambiente para outro quando uma tabela com uma identidade está envolvido, porque ele pode ficar confuso para os usuários. Não temos problemas quando uma seqüência é usado. Nós permitimos que os usuários atualizem qualquer esquema objetos para que eles possam alterar suas seqüências se eles precisam.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top