Durante la progettazione di tabelle, ho sviluppato l'abitudine di avere una colonna unica e che creo la chiave primaria. Ciò si ottiene in tre modi a seconda delle esigenze:
- Colonna intera identità che aumenta automaticamente.
- Identificatore univoco (GUID)
- Una colonna carattere corto (x) o intero (o altro tipo numerico relativamente piccolo) che può fungere da colonna identificatore di riga
Il numero 3 verrebbe utilizzato per una ricerca abbastanza piccola, per lo più leggi le tabelle che potrebbero avere un codice stringa di lunghezza statica univoco o un valore numerico come un anno o un altro numero.
Per la maggior parte, tutte le altre tabelle avranno un numero intero auto-incrementante o una chiave primaria identificativa univoca.
La domanda :-)
Di recente ho iniziato a lavorare con database che non hanno un identificatore di riga coerente e le chiavi primarie sono attualmente raggruppate in varie colonne. Qualche esempio:
- datetime / personaggio
- datetime / integer
- datetime / varchar
- car / nvarchar / nvarchar
C'è un caso valido per questo? Avrei sempre definito un'identità o una colonna identificatore univoco per questi casi.
Inoltre ci sono molte tabelle senza chiavi primarie. Quali sono i motivi validi, se presenti, per questo?
Sto cercando di capire perché i tavoli sono stati progettati così come sono, e sembra essere un gran casino per me, ma forse ci sono state buone ragioni per farlo.
Una terza domanda per aiutarmi a decifrare le risposte: nei casi in cui vengono utilizzate più colonne per comprendere la chiave primaria composta, esiste un vantaggio specifico per questo metodo rispetto a una chiave surrogata / artificiale? Sto pensando principalmente alle prestazioni, alla manutenzione, all'amministrazione, ecc.?