Articles

Capire le chiavi primarie di MySQL

Le chiavi primarie servono come identificatori unici per i record di una tabella, mentre le chiavi esterne sono usate per collegare tra loro tabelle correlate. Quando si progetta un insieme di tabelle di database, è importante specificare quali campi saranno usati per le chiavi primarie e straniere per chiarire sia la struttura della tabella che le relazioni tra le tabelle.

Chiavi primarie

È possibile specificare una chiave primaria per la tabella con il vincolo PRIMARY KEY. In uno schema di database ben progettato, una chiave primaria serve come un identificatore unico e immutabile per ogni record. Se una chiave è dichiarata come primaria, questo di solito implica che i valori in essa saranno raramente modificati.

Il vincolo PRIMARY KEY può essere pensato come una combinazione dei vincoli NOT NULL e UNIQUE perché richiede che i valori nel campo specificato non siano né NULL né ripetuti in qualsiasi altra riga. Si consideri il seguente esempio, che dimostra l’impostazione del campo numericoAirportID come chiave primaria per la tabella airport.

mysql> CREATE TABLE airport ( -> AirportID smallint(5) unsigned NOT NULL, -> AirportCode char(3), -> AirportName varchar(255) NOT NULL, -> CityName varchar(255) NOT NULL, -> CountryCode char(2) NOT NULL, -> NumRunways INT(11) unsigned NOT NULL, -> NumTerminals tinyint(1) unsigned NOT NULL, -> PRIMARY KEY (AirportID) -> ) ENGINE=MYISAM;Query OK, 0 rows affected (0.05 sec)

In questa situazione, poiché il campo AirportID è definito come chiave primaria, MySQL non permetterà la duplicazione o valori NULL in quel campo. Questo permette all’amministratore del database di assicurarsi che ogni aeroporto elencato nella tabella abbia un valore numerico unico, imponendo così un alto grado di coerenza dei dati memorizzati.

I vincoli di KEY PRIMARIA possono essere specificati sia per un singolo campo che per un insieme di campi multipli. Considerate il seguente esempio, che dimostra la costruzione di una tabella contenente una chiave primaria composita:

mysql> CREATE TABLE flightdep ( -> FlightID SMALLINT(6) NOT NULL, -> DepDay TINYINT(4) NOT NULL, -> DepTime TIME NOT NULL, -> PRIMARY KEY (FlightID, DepDay, DepTime) -> ) ENGINE=MyISAM;Query OK, 0 rows affected (0.96 sec)

In questo caso, le regole della tabella permettono la ripetizione del numero del volo, del giorno o dell’ora di partenza, ma non di tutti e tre insieme. Guardate cosa succede se provate:

mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');Query OK, 1 row affected (0.20 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,2,'00:01');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:02');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');ERROR 1062 (23000): Duplicate entry '511-1-00:01:00' for key 'PRIMARY'

Le chiavi primarie composte possono essere utili quando un record deve essere identificato univocamente da una combinazione dei suoi attributi, piuttosto che da un solo attributo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *