Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2005 mi penalizzerà per l'utilizzo di un nvarchar(50) come chiave primaria, invece di un intero?

Ti sei imbattuto in una delle principali "guerre sante" della progettazione di database. Il dibattito a cui ti riferisci è l'argomento "chiave surrogata vs. chiave naturale" che imperversa da quando ci sono stati RDBMS (per quanto ne so).

Il dibattito si riduce essenzialmente all'opportunità di utilizzare una chiave rappresentativa (surrogata, ad esempio una colonna IDENTITY) rispetto all'utilizzo dei dati effettivi che descrivono in modo univoco un record (chiave naturale).

Dirò che non esiste una risposta "giusta". Le misure delle prestazioni sono un artefatto della piattaforma e dovrebbero essere valutate mediante la sperimentazione, ma è probabile che le prestazioni non siano la principale preoccupazione.

Quello che considero l'argomento principale per le chiavi surrogate è l'immutabilità delle chiavi primarie. Se scegli di utilizzare una chiave naturale, rinunci alla possibilità di modificare quella chiave dopo che è stata stabilita. Rinunci anche alla possibilità che possa diventare non unico ad un certo punto in futuro. Per questi motivi, in genere (non sempre) utilizzo chiavi surrogate per la maggior parte delle mie tabelle.

Tuttavia, come ho detto, c'è un dibattito di lunga data pieno di discussioni sulle strategie di indicizzazione e sull'aderenza alla forma normale da leggere se sei così incline.

Vorrei Google "surrogato contro chiavi naturali". Ecco alcuni link per iniziare:

Ingegneria dei sistemi e RDBMS

Techrepublic

Blog di Tony Rogerson

Spero che questo aiuti.