Newsgroup: it.comp.lang.visual-basic
Titolo: [?] integrità referenziale

ciao a tutti,
ho appena cominciato a studiare su alcuni libri come programmare utilizzando
i database e non ho ben capito che cosa significa l'integrità referenziale.
c'è qualche anima pia che gentilmente potrbbe farmi un esempio?
grazie 1000
ciao
Marco

 c'è qualche anima pia che gentilmente potrbbe farmi un esempio?
Lo dice la parola stessa: si tratta di mantenere integro il legame
referenziale tra dati.
Diciamo che hai un archivio di anagrafiche e un archivio di tipologie di
anagrafica. Nell'archivio di anagrafiche hai i nominativi coi loro
indirizzi, e un codice che dice che tipo di anagrafica è. Nell'archivio
delle tipologie di anagrafica, avrai che il codice 1 sta per "cliente", 2
per "fornitore", 3 per "amico", e così via.
Tutto funziona fino a che non decidi di cancellare un dato dell'archivio
delle tipologie di anagrafica, che sia in uso da uno (o più) record
nell'archivio delle anagrafiche.
A quel punto, se cancelli il dato, ti ritrovi con i record della tabella
delle anagrafiche che puntano tramite un codice (ovvero "referenziano") un
dato di un'altra tabella che non esiste più. In questo caso, hai perso
l'integrità referenziale.
Esistono sistemi che permettono di evitare il problema. Si tratta per
l'appunto di legare le 2 tabelle tramite un legame di integrità
referenziale.
A questo punto puoi avere 3 scenari distinti:
Conservativo: se cancelli o modifichi il dato in integrità referenziale, il
motore di database si rifiuta e ti restituisce un errore.
Con aggiornamento dei campi correlati: se modifichi il dato (cambiando ad
esempio il codice nella tabella delle tipologie di anagrafica), il motore di
database aggiorna anche la tabella di Anagrafica sostituendo il vecchio
codice col codice modificato. Se però cerchi di cancellare il dato, ancora
si rifiuta e ti ritorna errore
Con eliminazione dei record correlati: Se cancelli un record (eliminando ad
esempio il codice nella tabella delle tipologie di anagrafica), il motore di
database elimina anche tutti i record della tabella Anagrafica che
utilizzano quel codice.
Gli scenari 2 e 3 possono anche essere attivi contemporaneamente. Lo
scenario 3 però è meglio usarlo con molta attenzione solo in pochi casi
specifici, altrimenti rischi, come nell'esempio, di perdere la metà delle
tue anagrafiche solo perché hai sbadatamente cancellato la tipologia "Amici"
dalla tabella delle tipologie di anagrafica.
Se vuoi fare qualche esperimento, usa access, vai in Strumenti - Relazioni,
e metti in relazione tra di loro 2 tabelle (quelle del mio esempio vanno
bene per provare). Tra le tabelle puoi stabilire relazioni uno-a-uno o
uno-a-molti.
Ciao
*Roby*
P.S. per Wodka4U
Battuto sul tempo... ;-)

 leggi il post di wodka 5 post piů sotto!
letto!
aspetterň con anzia....
grazie,
ciao

L'integritŕ referenziale č una caratteristica dei database relazionali
grazie alla quale vengono impedite modifiche o cancellazioni di record in
una tabella se esse compromettono le relazioni che la tabella ha con le
altre.
In parole povere non si puň eliminare o modificare un record se ad esso
fanno riferimento altri record di altre tabelle.
Gemini.

Siccome non ho testi sotto mano cercherò di spiegartelo con la mia
immensa ignoranza grammaticale......:-) per esempio in Access puoi
collegare due tabelle tra di loro tramite un campo a tua scelta che
compaia cmq all'interno delle due. Es: prima tabella contiene il nome,
cognome, indirizzo seconda tabella contiene cognome, età, stipendio  Se
applichi un'integrità referenziale tra le due tabelle tramite il campo
cognome vedrai che se provi a cancellare il record di un determinato
cognome (es: Rossi) cancellerai tutti i record della seconda tabella che
hanno il campo cognome con il nome Rossi  In poche parole ti permette di
collegare due tabelle, avendo la possibilità di cancellare un record
della prima tabella e a sua volta cancellerai tutti i record correlati
con il campo della prima tabella + o - Spero di essermi spiegato....
l'italiano non è mai stata la mia materia preferita......