Si consiglia di utilizzare Identity come alternativa alla chiave primaria?


11

Possiamo dichiarare un Identitylike in id_nummodo che id_numabbia un incremento di numeri univoci.

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

Si consiglia di utilizzare Identityin alternativa a Primary keypoiché Identityfornito un numero univoco per ogni riga?


Perché devi farlo? poiché è utile essere una chiave primaria nella tabella, crea automaticamente un indice cluster e può essere ottimizzato.
— KuldipMCA,

4
No, si consiglia di utilizzare IDENTITY come chiave primaria (non come alternativa a un PK). Costituisce una chiave primaria molto buona, molto efficiente (che per impostazione predefinita è anche la chiave di clustering in SQL Server): è stretta, di solito statica, in genere unica (a meno che non si scherzi con le specifiche di identità) ed è sempre- in aumento
— marc_s,

Risposte:


23

Identity columnse Primary Keyssono due cose molto distinte. An Identity columnfornisce un numero a incremento automatico. Questo è tutto. Il Primary Key(almeno in SQL Server) è un vincolo univoco che garantisce l'univocità e di solito è (ma non sempre) la chiave cluster. Anche in MS SQL Server è anche un indice (in alcuni RDBMS non sono così strettamente legati). Come indice fornisce ricerche più veloci, ecc. Spesso Identity columnsvengono utilizzati come Primary Keyse non natural keyesiste alcun bene , ma non sono un sostituto.


1
In SQL Server, un indice non cluster contiene la chiave primaria a livello foglia. La designazione di una chiave naturale come chiave primaria renderà gli indici molto grandi.
— Andomar,

2
@Andomar un PK è un'entità logica. L'indice di supporto per PK è fisico. E un indice non cluster può supportare un PK, non deve necessariamente essere un indice cluster. Pertanto, la tua affermazione è errata se l'indice del PK è un NCI. È la chiave di indice cluster a livello fogliare di NCI.
— Thomas Stringer

@ThomasStringer: hai ragione, il mio commento dovrebbe leggere clustered index keydove dice primary key.
— Andomar,

Possibilmente. La tua chiave naturale potrebbe essere un numero intero, nel qual caso non c'è differenza. Il numero di argomenti che vedrai sui tasti Artificiale vs Naturale è sconcertante. Prova una ricerca web su di esso :) Qualche volta sembra essere uno degli argomenti per le chiavi artificiali.
— Kenneth Fisher,

5

No, non lo è, perché l'identità non garantisce un valore univoco. La proprietà identity può essere ignorata con SET IDENTITY_INSERT <schema>.<table> ON(in SQL Server - non hai specificato quale RDBMS stai usando).

Un vincolo chiave primaria (e un vincolo univoco) utilizza un indice univoco per applicare l' univocità.


5
non garantisce un valore unico. Ma non fa nient'altro. Chiunque abbia accesso al database può tentare di INSERIRE valori duplicati su una chiave primaria. Ciò che fa un'identità è semplificare la generazione di valori univoci (soprattutto se non si dispone di una buona chiave naturale come afferma Kenneth Fisher). Potresti dichiarare un campo intero con chiave primaria e sarebbe esattamente la stessa cosa ma senza generazione automatica. Quindi l'IDENTITÀ è per la generazione e la chiave è per far rispettare l' unicità.
— Chris Aldrich,

+1 Per sottolineare il difetto di base nella premessa della domanda - Identitye Primary Keynon sono equivalenti e servono due scopi distinti.
— JNK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.