Per essere al contrario, No, NON è necessario disporre sempre di un AutoKc numerico.
Se analizzi attentamente i tuoi dati, spesso identifichi le chiavi naturali nei dati. Questo è spesso il caso in cui i dati hanno un significato intrinseco per l'azienda. A volte i PK sono artefatti di sistemi antichi che gli utenti aziendali utilizzano come seconda lingua per descrivere gli attributi del loro sistema. Per esempio, ho visto i numeri VIN del veicolo utilizzati come chiave primaria di una tabella "Veicolo" in un sistema di gestione della flotta.
Comunque abbia avuto origine, SE hai già un identificatore univoco, usalo. Non creare una seconda chiave primaria insignificante; è dispendioso e può causare errori.
A volte è possibile utilizzare un PK AutoInc per generare un valore significativo per il cliente, ad esempio Numeri di polizza. Impostare il valore iniziale su qualcosa di sensato e applicare le regole di business sui principali zeri ecc. Questo è probabilmente un approccio "migliore di entrambi i mondi".
Quando si dispone di un numero limitato di valori relativamente statici, utilizzare i valori che hanno senso per l'utente del sistema. Perché utilizzare 1,2,3 quando è possibile utilizzare L, C, H dove L, H e C rappresentano la vita, l'auto e la casa in un contesto di "tipo di polizza" assicurativo o, tornando all'esempio VIN, che ne dici di usare "TO "per Toyota? Tutte le auto Toyata hanno un VIN che inizia con "TO" È una cosa in meno che gli utenti devono ricordare, rende meno probabile l'introduzione di errori di programmazione e degli utenti e può anche essere un surrogato utilizzabile per una descrizione completa nei report di gestione che semplifica i report da scrivere e forse più veloce da generare.
Un ulteriore sviluppo di questo è probabilmente "un ponte troppo lontano" e generalmente non lo consiglio, ma lo sto includendo per completezza e potresti trovare un buon uso per questo. Cioè, utilizzare la descrizione come chiave primaria. Per i dati che cambiano rapidamente questo è un abominio. Per dati molto statici riportati su All The Time , forse no. Ne ho appena parlato, quindi è seduto lì come una possibilità.
Faccio uso di AutoInc PK, mi impegno solo il cervello e cerco prima alternative migliori. L'arte della progettazione di database sta facendo qualcosa di significativo che può essere interrogato rapidamente. Avere troppi join impedisce questo.
MODIFICA Un altro caso cruciale in cui non è necessario un PK autogenerato è il caso di tabelle che rappresentano l'intersezione di altre due tabelle. Per attenersi all'analogia di Car, A Car ha 0..n accessori, ogni accessorio può essere trovato su molte auto. Quindi, per rappresentarlo, crei una tabella Car_Accessory contenente i PK di auto e accessori e altre informazioni rilevanti sulle date del link, ecc.
Ciò di cui non hai bisogno (di solito) è un PK AutoInc su questa tabella: si accederà solo tramite l'auto "dimmi quali accessori ci sono su questa auto" o dall'Accessorio "dimmi quali auto hanno questo accessorio"