Scrivo un breve articolo per utenti non esperti per chiarire il concetto di chiave primaria.

Una relazione, prendiamo ad esempio 1:n, si realizza quando la chiave primaria della tabella1 è riportata come chiave esterna nella tabella2.
Per ogni unica chiave primaria possono corrispondere infiniti riferimenti ad essa nella tabella2, come chiave esterna.

Approfondiamo quindi il concetto di chiave primaria:

Lo scopo di una chiave primaria è quello di individuare con la massima rapidità  possibile un dato record all’interno di una tabella in modo univoco.

Ad esempio per trovare il record numero 484892 all’interno di una tabella da milioni di record.

Tale operazione avviene di fatto ogni volta che bisogna andare a recuperare i dati presenti in un’altra tabella, attività  che su un database relazionale viene utilizzata molto frequentemente.

Una chiave primaria sulla maggior parte dei DBMS puà essere impostata come numerico, numerico auto incrementale, testuale, su più campi di vari formati etc…
Il fatto importante è che la chiave primaria di una tabella rispetti le seguenti affermazioni:

La chiave primaria DEVE essere univoca all’interno della tabella, infatti non è possibile che due record abbiano la stessa chiave primaria.

La chiave primaria deve avere come requisito (non obbligatorio ma di buon senso) la compattezza:

1.Essendo fondamentale per mantenere un indice primario, con lo scopo di velocizzare la ricerca.
Maggiore è la compattezza del campo che descrive la chiave primaria della tabella e più efficace sarà  la gestione di questo indice.
Se ne evince chiaramente che una chiave primaria intera (numerica) è tendenzialmente meglio ottimizzata rispetto ad un campo stringa a lunghezza variabile.

2.Essendo il contenuto della chiave primaria utilizzato in qualità  di chiave esterna in altre tabelle è chiaro che se la chiave primaria non è compatta cià comporta uno spreco di spazio occupato dal database.

La chiave primaria nei principali DBMS viene utilizzata di solito come dato numerico e con la proprietà  di essere automaticamente incrementato dal database all’inserimento di ogni nuovo record.
In questo modo lo sviluppatore e l’utente non devono preoccuparsi di gestire la chiave primaria e quindi di dover preoccuparsi che essa non sia già  presente.

Rischio di duplicati

Un facile esempio in cui una chiave primaria numerica autoincrementale puà comportare la creazione di duplicati è data per esempio dall’anagrafica di una società .
Infatti se l’amministrazione non è attenta a verificare che una data azienda è già  presente a database il rischio è di ritrovarsi 8 Telecom, 5 Enel etc…

Questa situazione è molto pericolosa sia perchè comporta uno spreco di dati e ridondanza di informazioni e sia perchè rende poco consistenti e validi i dati nel caso ad esempio di reportistiche e statistiche, questo perchè la stessa società  verrebbe (giustamente) trattata dal database come differenti aziende.

Saluti, Maxgrante
info[AT]massimo-caselli[DOT]com