Foreign keys: gestire le relazioni tra tabelle in MySQL

4 luglio 2006

Nei database relazionali professionali sono disponibili le cosiddette Foreign keys che consentono di legare dati di due tabelle diverse tra di loro permettendo di mantenere l’integrità delle tabelle del database implicate: in pratica si impedisce di cancellare dei dati di una tabella che possiedono una relazione per cui invaliderebbero dei dati in un’altra.

Pensiamo ad esempio ad un database formato da una tabella editori ed una libri collegate tra di loro con relazione uno a molti. Cancellando un record della tabella editori ci troveremmo con alcuni record della tabella libri a puntare ad editori non più presenti nel database danneggiando l’integrità del database. Questo può portare teoricamente ad estrarre meno dati di quelli previsti con una query.

MySQL permette di utilizzare questa funzione per mezzo dello storage engine InnoDB.

InnoDB storage engine

L’engine InnoDB fornisce, oltre alle Foreign keys, un sistema di transazioni con rollback e possibilità di recupero a seguito di un crash, un sistema di locking ben funzionante, prestazioni elevate con tabelle con una grande mole di dati, la possibilità di creare tabelle di ogni dimensione anche con filesystem con limiti nella dimensione dei file.

Dalla versione 4.0 di MySQL questo storage engine è attivo di default quindi se avete a disposizione una versione superiore sul vostro spazio (ad oggi la MySQL AB rilascia come versione consigliata la 4.1) probabilmente potrete creare delle tabelle di questo tipo. Per le versioni precedenti è invece necessario compilare il supporto specifico.

Non è necessario che tutte le tabelle del database siano di tipo InnoDB, basta che lo siano le tabelle che dovranno fare uso delle funzioni garantite solo da questo storage engine.

Per creare una tabella di tipo InnoDB è sufficiente specificarlo nella definizione della stessa in questo modo:

CREATE TABLE tabella (campoa INT, campob CHAR (20)) TYPE=InnoDB;

Foreign keys

Le Foreign keys sono implementabili se:

  • entrambe le tabelle siano di tipo InnoDB
  • entrambe le tabelle abbiano un indice in cui i campi interessati siano indicati come primo campo
  • non siano inclusi campi di tipo BLOB o TEXT nelle chiavi usate

Vediamo qualche esempio che invaliderebbe l’uso delle Foreign keys.

Se vuoi aggiornamenti su Foreign keys: gestire le relazioni tra tabelle in MySQL inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Foreign keys: gestire le relazioni tra tabelle in MySQL

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy