¿Se recomienda usar Identity como alternativa a la clave primaria?

11

Podemos declarar un me Identitygusta id_numpara que id_numtenga un incremento de números únicos.

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

¿Se recomienda usar Identitycomo alternativa Primary keyya que Identityproporcionó un número único para cada fila?

Jack
fuente
¿Por qué necesitas hacer esto? porque es bueno ser una clave principal en la tabla, crea automáticamente un índice de clúster y es bueno para la optimización.
KuldipMCA
44
No, se recomienda usar IDENTITY como clave principal (no como alternativa a una PK). Es una clave primaria muy buena y muy eficiente (que por defecto también es la clave de agrupación en SQL Server): es estrecha, generalmente estática, generalmente es única (a menos que juegues con las especificaciones de identidad), y siempre es- creciente
marc_s

Respuestas:

23

Identity columnsy Primary Keysson dos cosas muy distintas. Un Identity columnproporciona un número de incremento automático. Eso es todo lo que hace. El Primary Key(al menos en SQL Server) es una restricción única que garantiza la unicidad y suele ser (pero no siempre) la clave agrupada. Nuevamente en MS SQL Server también es un índice (en algunos RDBMS no están tan estrechamente vinculados). Como índice, proporciona búsquedas más rápidas, etc. Identity columnsSe utilizan con frecuencia como Primary Keysi no natural keyexistiera nada bueno , pero no son un sustituto.

Kenneth Fisher
fuente
1
En SQL Server, un índice no agrupado contiene la clave primaria a nivel de hoja. Designar una clave natural como clave principal hará que sus índices sean muy grandes.
Andomar
2
@Andomar un PK es una entidad lógica. El índice de soporte para la PK es físico. Y un índice no agrupado puede soportar una PK, no necesariamente tiene que ser un índice agrupado. Por lo tanto, su declaración es incorrecta si el índice de PK es un NCI. Es la clave de índice agrupada a nivel de hoja de NCI.
Thomas Stringer
@ThomasStringer: Tienes razón, mi comentario debería leer clustered index keydonde dice primary key.
Andomar
Posiblemente. Su clave natural podría ser un número entero, en cuyo caso no hay diferencia. La cantidad de argumentos que verá en las claves Artificial vs Natural es asombrosa. Intente una búsqueda web alguna vez :) Ese es uno de los argumentos a favor de las claves artificiales.
Kenneth Fisher
5

No, no lo es, porque la identidad no garantiza un valor único. Se puede omitir la propiedad de identidad SET IDENTITY_INSERT <schema>.<table> ON(en SQL Server, no especificó qué RDBMS está utilizando).

Una restricción de clave principal (y una restricción única) usa un índice único para imponer la unicidad.

Caminante de piedra verde
fuente
55
No garantiza un valor único. Pero tampoco nada más. Cualquier persona que tenga acceso a la base de datos puede intentar INSERTAR valores duplicados en una clave primaria. Lo que hace una identidad es facilitar la generación de valores únicos (especialmente si no tiene una buena clave natural como dice Kenneth Fisher). Podría declarar un campo entero con clave primaria y sería exactamente lo mismo pero sin generación automática. Por lo tanto, la IDENTIDAD es para la generación y la clave es hacer cumplir la unicidad.
Chris Aldrich
+1 Para señalar la falla básica en la premisa de la pregunta, Identityy Primary Keyno son equivalentes y tienen dos propósitos distintos.
JNK