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.