É recomendável usar o Identity como uma alternativa à chave primária?

11

Podemos declarar um Identitylike id_numpara que id_numtenha um incremento de números únicos.

CREATE TABLE new_employees
(
  id_num int IDENTITY(1,1),
  fname varchar (20),
  minit char(1),
  lname varchar(30)
)

É recomendável usar Identitycomo alternativa ao número fornecido Primary keydesde Identitycada linha?

Jack
fonte
Por que você precisa fazer isso? porque é bom ser uma chave primária na tabela, ele cria automaticamente o índice de cluster e é bom para otimização.
KuldipMCA
4
Não, é recomendável usar IDENTITY como chave primária (não como alternativa a uma PK). Ela cria uma chave primária muito boa e muito eficiente (que por padrão também é a chave de cluster no SQL Server) - é estreita, geralmente estática, é tipicamente exclusiva (a menos que você mexa nas especificações de identidade) e é sempre- aumentando
marc_s 15/07/2013

Respostas:

23

Identity columnse Primary Keyssão duas coisas muito distintas. Um Identity columnfornece um número de incremento automático. É tudo o que faz. A Primary Key(pelo menos no SQL Server) é uma restrição exclusiva que garante exclusividade e geralmente é (mas nem sempre) a chave em cluster. Novamente no MS SQL Server, também é um índice (em alguns RDBMS, eles não estão tão intimamente ligados). Como índice, ele fornece pesquisas mais rápidas, etc. Freqüentemente Identity columnssão usadas como Primary Keyse não houvesse bom natural key, mas não são um substituto.

Kenneth Fisher
fonte
11
No SQL Server, um índice não agrupado em cluster contém a chave primária no nível folha. A designação de uma chave natural como chave primária tornará seus índices muito grandes.
Andomar 15/07/2013
2
@Andomar uma PK é uma entidade lógica. O índice de suporte para o PK é físico. E um índice não clusterizado pode suportar uma PK, não precisa necessariamente ser um índice clusterizado. Portanto, sua declaração está incorreta se o índice da PK for um NCI. É a chave de índice em cluster no nível folha dos NCIs.
21413 Thomas Thomas Stringer
@ Thomashoinger: Você está certo, meu comentário deve ler clustered index keyonde diz primary key.
Andomar
Possivelmente. Sua chave natural pode ser um número inteiro; nesse caso, não há diferença. O número de argumentos que você verá nas teclas Artificial e Natural é impressionante. Tente uma pesquisa na web em algum momento :) Esse é apenas um dos argumentos para chaves artificiais.
19413 Kenneth Fisher
5

Não, não é, porque a identidade não garante um valor único. A propriedade de identidade pode ser ignorada SET IDENTITY_INSERT <schema>.<table> ON(no SQL Server - você não especificou qual RDBMS está usando).

Uma restrição de chave primária (e uma restrição exclusiva) usa um índice exclusivo para impor exclusividade.

Andarilho de Pedra Verde
fonte
5
não garante um valor único. Mas nem mais nada. Qualquer pessoa que tenha acesso ao banco de dados pode tentar INSERIR valores duplicados em uma chave primária. O que uma identidade faz é facilitar a geração de valores únicos (especialmente se você não tiver uma boa chave natural, como diz Kenneth Fisher). Você pode declarar um campo inteiro com chave primária e seria exatamente a mesma coisa, mas sem geração automática. Portanto, a IDENTIDADE é para geração e a chave é para reforçar a exclusividade.
22613 Chris Aldrich
+1 Por apontar a falha básica na premissa da pergunta - Identitye Primary Keynão é equivalente e serve a dois propósitos distintos.
JNK