2011-12-21 15 views

risposta

9

"Chiave di riferimento" non è un termine tecnico normale nella modellazione relazionale o nell'implementazione SQL nell'inglese americano.

Una chiave esterna "fa riferimento" a una chiave in un'altra tabella; potrebbe essere da dove viene la confusione?

5

Non avete davvero qualcosa chiami una chiave di riferimento ... Sono la stessa cosa ... si potrebbe vedere la parola riferimenti utilizzato ad esempio in SQLite: si potrebbe utilizzare la sintassi come questo per avviare un db di autori e libri. Questo ti consente di mostrare che un autore può avere molti libri. Questo dice il db che il books.author_id (definito un paio di righe su) fa riferimento a author.id

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    firstname varchar(255) 
    lastname varchar(255) 
); 

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    author_id INTEGER, 
    title varchar(255), 
    published date, 
    FOREIGN KEY(author_id) REFERENCES author(id) 
); 
2

Forse si sta utilizzando la "chiave di riferimento" termine un po 'vagamente?

Un valore di chiave esterna in una riga è detto "riferimento" alla riga che contiene il valore della chiave corrispondente. Nota che la parola "riferimento" nella frase precedente è un verbo, quindi potremmo dire che abbiamo un valore di chiave esterna di riferimento e un valore di chiave di riferimento.

Sebbene siano i valori della chiave, piuttosto che il vincolo della chiave della tabella, a cui viene fatto riferimento, suppongo che parlando liberamente potremmo dire "chiave di riferimento" per indicare le righe che comprendono i valori che potrebbero potenzialmente essere referenziati. Vedo quindi come "chiave di riferimento" potrebbe diventare "chiave di riferimento", ma non smentire la sua origine.

36

Suppongo che si stia parlando dell'uso di in cui non viene utilizzata la parola chiave FOREIGN KEY, ad es.

author_id INTEGER REFERENCES author(id) 

... invece di ...

author_id INTEGER, 
FOREIGN KEY(author_id) REFERENCES author(id) 

La risposta è, che è semplicemente la sintassi abbreviata per la stessa cosa. La preoccupazione principale quando si alterna tra i due dovrebbe essere la leggibilità.

+0

Anche se il primo funzionerà senza abilitare chiavi esterne e il secondo non funzionerà. Il secondo modo non è più utilizzato? – schwiz

+0

È importante anche se si tenta di utilizzare il reverse engineering per creare diagrammi dal database in MySQL Workbench. Se si è utilizzata l'opzione firs durante la creazione del database, lo strumento non sarà in grado di creare connessioni tra gli elementi del diagramma. –

2

Una chiave esterna "fa riferimento" a una chiave in un'altra tabella. Quella chiave in qualche altra tabella è chiamata chiave di riferimento. Probabilmente sentirai molto su questo se stai usando la funzione grafica su phpmyadmin.

1

Ci sono 2 modi per dichiarare una chiave esterna (s):

  1. se la chiave esterna è un attributo SINGLE:
    RIFERIMENTI()

  2. se le chiavi esterne sono un elenco di attributi

FOREIGN KEY() RIFERIMENTI

1

L'unica e più importante differenza tra le due parole chiave "FOREIGN KEY" e "REFERENCES" delle due parole chiave è che entrambi rendono i dati come dati secondari della tabella padre, il "FOREIGN KEY" viene utilizzato per creare un livello tabella vincolo mentre la parola chiave REFERENCES può essere utilizzata solo per creare un vincolo a livello di colonna. I vincoli a livello di colonna possono essere creati solo durante la creazione della sola tabella. Ma i vincoli a livello di tabella possono essere aggiunti utilizzando il comando ALTER TABLE.

1

Una chiave esterna deve essere fare riferimento a una chiave primaria. Quando si utilizza il vincolo REFERENCES semplicemente, non è necessario che la chiave di riferimento sia una chiave primaria.

Problemi correlati