2009-03-17 5 views
11

Ok. Quindi so qual è la chiave primaria in DB. Se hai una tabella in un database, una chiave primaria è un singolo valore che è univoco per ogni riga della tabella. Ad esempio:Che cos'è esattamente una chiave esterna?

id | name | whatever 
------------------------- 
1  Alice  .... 
2  Bob  .... 
45  Eve  .... 
988 ....  .... 

Quindi ho bisogno di un buon esempio semplice per spiegare cosa sia esattamente una chiave esterna. Perché io proprio non capisco :)


Edit: OK è abbastanza facile, Penso di essere stato eccessivamente complicare il problema.

Quindi una domanda finale, l'unica restrizione sulle chiavi esterne è che sono un valore di chiave primaria valido nella tabella a cui mi riferisco?

+0

"l'unica restrizione sulle chiavi esterne è ..." Quella non è una "restrizione", è la definizione: un FK È una chiave primaria valida su un'altra tabella. –

+0

"... una chiave primaria è un singolo valore ..." sì, a patto che si riconosca che "valore" è _non_ sinonimo di "colonna". È perfettamente valido per la chiave primaria essere più valori. –

+0

Grrr. Non è possibile modificare i commenti. L'ultima frase dovrebbe essere: "È perfettamente valido che la chiave primaria sia più COLUMNS". –

risposta

21

Una chiave esterna è un campo che punta a una chiave primaria di un'altra tabella.

Esempio:

Table Name - Users 

UserID UserName UserRoleID 
1   JohnD  1 
2   CourtneyC 1 
3   Benjamin 2 

Table Name - UserRoles 

UserRoleID Desc 
1    Admin 
2    Moderator 

Si può vedere che Users.UserRoleID è una chiave esterna che punta al primario UserRoles.UserRoleID chiave

L'utilizzo di chiavi esterne rende la creazione di rapporti su altri tavoli semplici , che consente di collegare insieme i dati di più tabelle in un bel modo:

Esempio:

SELECT 
    a.UserID, 
    a.UserName, 
    b.Desc as [UserRole] 
FROM 
    Users a INNER JOIN 
     UserRoles b ON a.UserRoleID = b.UserRoleID 

uscita sarebbe allora:

UserID UserName User Role 
1   JohnD  Admin 
2   CourneyC Admin 
3   Benjamin Moderator 
0

In un database relazionale una relazione uno-a-molti è implementata facendo riferimento tabella figlio l'ID della tabella padre. L'ID genitore nella tabella Figlio è chiamato una chiave esterna in quanto fa riferimento a una chiave primaria di un'altra tabella.

12

Diciamo che avete un altro campo, che è la città natale:

id | name | city 
------------------------- 
1  Alice  San Francisco 
2  Bob  New York 
45  Eve  New York 
988 Bill  San Francisco 

Ora, non ha senso ripetere le stesse città in molte righe. Ciò potrebbe portare a errori di battitura, uso eccessivo dello spazio, difficoltà a far emergere risultati tra altri problemi. Quindi si utilizza una chiave esterna:

id | name | fk_city 
------------------------- 
1  Alice  1 
2  Bob  2 
45  Eve  2 
988 Bill  1 

tabella città natale:

id | name 
------------------------- 
1 | San Francisco 
2 | New York 

spero che rende le cose più chiare per voi. :-)

Aggiornamento: circa la tua domanda finale: Sì. :-)

3

Una chiave esterna è una colonna in una tabella che dovrebbe identificare in modo univoco qualcosa in un'altra tabella. Pertanto, i valori dovrebbero corrispondere alle chiavi primarie in quell'altra tabella.

Ad esempio, se si dispone di una tabella di studenti che frequentano corsi, ogni record includerà un ID studente e un ID corso. Queste sono le chiavi estranee in una tabella studenti (dove c'è un record per ogni id studente), e una tabella dei corsi (dove c'è un record per ogni ID corso).

Integrità referenziale significa che tutte le chiavi esterne corrispondono effettivamente a chiavi primarie in queste tabelle di destinazione. Ad esempio, tutti gli ID degli studenti e gli ID dei corsi nella tabella di registrazione corrispondono agli ID degli studenti reali e agli ID corso.

0

Una chiave esterna è un campo che fa riferimento a un'altra tabella nel database. Ad esempio, supponiamo di avere 2 tabelle, PERSON e ADDRESS. C'è un campo in PERSON chiamato ID e un campo in ADDRESS chiamato PERSON_ID. Si dovrebbe fare PERSON_ID fare riferimento a PERSON.ID come chiave esterna. Ciò significa che non è possibile avere un indirizzo che non è connesso a una persona, poiché il valore nel campo ADDRESS.PERSON_ID deve esistere nella tabella PERSON.

1
id | name | whatever | countryid 
------------------------------------- 
1  Alice  ....  13 
2  Bob  ....  42 
45  Eve  ....  1 
988 ....  ....  2 

id | countryid 
---------------- 
1  Japan 
2  Spain 
13  Norway 
42  Italy 

I punti chiave esterna dalla tabella persona (primo) ad una riga della tabella Paese (secondo)

0

utilizzando il vostro esempio tavolo, si supponga di avere un altro tavolo:

cartid | id | itemid 
----------------------- 
100  1  abc 
101  1  cde 

in questa tabella, la chiave primaria è la cartidea, la chiave esterna è l'id, che verrebbe collegata alla tua prima tabella. l'utente 1 ha due carrelli, ogni carrello ha un articolo ciascuno.

una chiave esterna è ciò che si utilizza per collegare due o più tabelle che hanno informazioni correlate tra loro.

0

Una chiave esterna è la chiave primaria di un'altra tabella memorizzata sul tuo tavolo. Di 'che hai una tabella di clienti e una tabella di ordini. Il CustomerId è probabilmente la chiave primaria nella tabella dei clienti e OrderId è probabilmente la chiave primaria nella tabella degli ordini. Ma sulla tabella degli ordini è necessario conoscere il cliente per questo ordine, no? Pertanto è necessario memorizzare il CustomerId nella tabella degli ordini. In questo caso il CustomerId sulla tabella degli ordini è una chiave esterna.

Vorrei sottolineare che non è necessario che una chiave primaria (e quindi una chiave esterna) sia una singola colonna. È più semplice, certo. Ma ho lavorato su sistemi aziendali in cui la chiave primaria era lunga 11 colonne, e sono sicuro che ci sono esempi più lunghi di quello. Cioè, dovevi conoscere il valore di 11 diverse colonne prima di poter identificare in modo univoco la riga.