2010-09-15 19 views
15

In una risposta su Stack Overflow, ho visto questo codice:Quali sono le chiavi esterne MySQL?

CREATE TABLE Favorites (
    user_id INT NOT NULL, 
    movie_id INT NOT NULL, 
    PRIMARY KEY (user_id, movie_id), 
    FOREIGN KEY (user_id) REFERENCES Users(user_id), 
    FOREIGN KEY (movie_id) REFERENCES Movies(movie_id) 
); 

non ho mai usato la 'chiave esterna' rapporto parola chiave prima.

  • Che cos'è?
  • Perché le persone lo usano?
  • Fornisce qualche vantaggio oltre alla semantica?
+0

possibile duplicato di [Che cos'è esattamente una chiave esterna?] (Http://stackoverflow.com/questions/655446/what-exactly-is-a-keyignkey) –

+0

http://stackoverflow.com/questions/1730837/can-someone-explain-mysql-foreign-keys –

risposta

14

Una chiave esterna è un riferimento a una chiave primaria in un'altra tabella o nella tabella stessa. Viene utilizzato per quello che viene chiamato referential integrity. Fondamentalmente nella tabella fornita, per un record da inserire in Favorites, è necessario fornire un valore valido user_id dalla tabella Users e uno movie_id valido dalla tabella Movies. Con l'applicazione delle chiavi esterne, non è stato possibile eliminare un record da Users o Movies. Se non avessi le chiavi esterne, potrei cancellare quei record. Quindi se avessi fatto un SELECT ... JOIN su Favorites si sarebbe rotto.

Vedere Wikipedia.

+0

Perché viene utilizzato? Ho avuto più tabelle con relazioni molti-a-molti e ho lavorato 'bene' senza definire esplicitamente queste relazioni. –

+0

Fondamentalmente aiuta a mantenere puliti i dati. –

+0

Quindi ... questo fondamentalmente obbliga MySQL a verificare che l'ID esista e genera un errore, non riuscendo a inserire il record se non esiste? –

12

Una chiave esterna descrive una relazione tra due tabelle. Offre numerosi vantaggi:

  • È possibile applicare questo se un valore si trova in una tabella, quindi deve esistere anche nell'altra tabella. Qualsiasi tentativo di rompere questo vincolo darà un errore.
  • Consente agli amministratori di database o ai programmatori di comprendere più facilmente la relazione tra le tabelle semplicemente osservando le definizioni della tabella.
  • Consente agli strumenti di ispezionare lo schema e disegnare diagrammi che mostrano le relazioni tra le tabelle o creare classi in cui i figli di un oggetto sono accessibili dal genitore tramite i membri.
  • In InnoDB l'aggiunta di una chiave esterna aggiunge automaticamente un indice su quella colonna in modo che l'unione possa essere eseguita in modo efficiente in entrambe le direzioni. (Source)

Se si utilizza MyISAM, le chiavi esterne non sono supportate.

1

È inoltre possibile aggiungere la possibilità di cascata quando viene eliminato un record correlato. Ad esempio, se ho una tabella di libreria con molti libri in una tabella "libro" correlata e elimino una determinata libreria dalla mia tabella di biblioteca, anche i suoi "libri contabili" saranno cancellati.

Problemi correlati