Newsgroup: it.comp.appl.access
Titolo: Chiave Esterna

ciao a tutti 
vorrei sapere a che cosa serve effettivamente mettere una Chiave Esterna (FK). Io ho un db (A2003) con 2 tabelle: tblIscritti con IDIscritto (contatore e PK) e tblDonazioni con IDDonazione (numerico) senza PK. Ad ogni iscritto appartengono + donazioni nel tempo, per cui c'è una relazione uno a molti tra i due ID con applicata l'integrità referenziale. Tutto funziona bene, inserisco i dati con una maschera Iscritti e una sottomaschera donazioni in foglio dati. 
Perchè, come ho letto sul manuale di Viescas, è importante mettere una FK (in questo caso IDIscritto nella tblDonazioni)? cosa mi migliorerebbe? E poi, quale campo dovrebbe avere la PK, IDDonazione o IDIscritto? (o nessuno?)
 
grazie 
Luciano

 IDIscritto? (o nessuno?)
 
Che cosa sarebbe un FK? mai sentita nominare!
 
Metti una PK (PrimaryKey) sul PrimaryField della PrimaryTable e
definisci la relazione  1-00 col RelatedField della RelatedTable.
 
Il campo RelatedField potrï¿œ essere indicizzato con la modalitï¿œ
duplicati consentiti SOLO SE con riferimento ad esso, indipendentemente
dalla MainTable, devi effettuare delle ricerche.
Se non devi effettuare ricerce su detto RelatedField non mettere alcun 
indice: ogni indice inserito appesantisce la procedura con riflessi
negativi sulla velocitï¿œ di esecuzione.
 
Se metti - sul RelatedField - una chiave primaria o un indice che
non consenta duplicati... addio relazione 1-00!
Ottieni, nella migliore delle ipotesi, una relazione 00-00 che non
serve a niente.
Infatti fra due campi omologhi di tablelle non relazionate hai giï¿œ
una relazione 00-00.
 
Bruno
 
 

 IDDonazione o IDIscritto? (o nessuno?)
 
FK vuol dire un campo che nella seconda tabella contiene
dati della prima tabella per collegare le due tabelle.
Vuol dire che hai gi� messo un FK: il campo IDDonazione.
 
Del resto nel momento quando hai creato la relazione, Access
automaticamente ha aggiunto un index sul campo del FK, cio�
IDDonazione per migliorare la prestazione.
 
Per� ci sono due errori nella tua costellazione:
1. La tabella tblDonazioni non ha un PK.
2. Con "Id..." hai usato la denominazione classica per il
campo univoco e PK come FK. Il modo giusto sarebbe:
 
Nella tabella tblDonazioni c'� un campo IDDonazione
del tipo contatore impostato come PK della tabella.
 
Sempre nella tabella tblDonazioni c'� un campo
IDIscritto (o FKIDIscritto) del tipo numerico (Long).
Su questo campo � impostato la relazione con tblIscritti.
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 
 


 
FK = Foreign Key = Chiave Esterna
 
http://it.wikipedia.org/wiki/Chiave_esterna
 


 Luciano
 
la chiave esterna altro non e' che un campo sulla tabella secondaria (che
non sia il suo PK che ci vuole cmq), che faccia da relazione al campo PK
della tabella primaria... 
 
 
-- 
------------
Pablitomf
Napoli sempre nel "Q"uore!
"mammasantissima" si nasce, non si diventa.
 
TheSpaceCowboy : 
Britos deve recuperare per arrivare in forma al prossimo
infortunio - 24/10/12
 

 
http://it.wikipedia.org/wiki/Chiave_esterna
 
 
Sï¿œ il significato letterale l'avevo capito, ma perchï¿œ
Key (chiave), caso mai ï¿œ un Index (indice).
 
Vuoi chiamare Key un Index esterno?
Ok, e quando Index non ï¿œ come lo chiami?
Io l'ho sempre chiamato RelatedField o ForeignRelatedField.
 
Bruno
 
 

 Io l'ho sempre chiamato RelatedField o ForeignRelatedField.
 
"Index" � un altra cosa.
"Key" � la nomenclatura ufficiale per questo ruolo in una relazione.
Certo si puo sempre creare la sua nomenclatura personale. ;-)


 Certo si puo sempre creare la sua nomenclatura personale. ;-)
 
A proposito...  di FK � un ruolo (ovvero "constraint").
Si deve aggiungere che un foreign key puo essere composto
da 1 solo campo ma anche da 2 o pi� = n campi o foreign
key fields/columns. In inglese e tedesco (Fremdschl�sselfeld)
si dice cos�, in italiano non sono sicuro.


 IDDonazione per migliorare la prestazione.
 
Quando mai?
Access non pone alcun indice nel RelatedField (FK) della RelatedTable.
Lo poni tu solo se ti serve.
Poichï¿œ inserire un indice quando non serve peggiora soltanto
le prestazioni.
 
Bruno
 
 

 Sei sicuro?
 
Io non sono addentro alle segrete cose di MS e apprendo solo ora
dell'automatico inserimento di un indice (invisibile) sulla 
RelatedTable.
Tale indice viene denominato MainTRelatedT (se MainT e RelatedT sono
i nomi delle due tabelle) e la Property Foreign dichiarata TRUE.
 
Se poi l'utente (inconsapevole del fatto) ne aggiunge un altro,
questo assume la denominazione del campo e la Property Foreign
dichiarata FALSE.
 
I due indici avranno funzioni diverse? si spera di sï¿œ...
Altrimenti si rischia davvero di navigare in un mare di indici.
 
Io comunque, normalmente, nulla aggiungo in fatto di indici
alla related table.
 
Bruno