View Full Version : [Access 2003] - Relazioni
Guybrush Threepwood
26-02-2009, 17:35
Ciao a tutti.
Copio qui una discussione già aperta nella sezione di Microsoft, ma forse lì nessuno sapeva aiutarmi e non ho capito come fare a spostare una discussione già aperta.
Ho creato un database in cui una tabella principale è collegata ad altre 6 tabelle "satelliti".
La relazione tra le 6 tabelle con quella principale è del tipo 1 a molti.
Nelle proprietà delle relazioni ho flaggato la casella "Aggiorna campi correlati a catena" mentre ho lasciato deselezionata la casella "Elimina record correlati a catena".
Il problema è questo: se voglio eliminare un record da una delle tabelle satelliti, non me lo permette in quanto mi dice che la tabella principale contiene record correlati.
Come faccio ad eliminare un record dalla tabella satellite senza che vengano eliminati i record nella tabella principale che contengono i riferimenti al record che voglio cancellare?
Un'ultima cosa: se dalle proprietà delle relazioni tolgo la spunta alla casella "Aggiorna campi correlati a catena", se modifico un record mi modifica lo stesso tutti i campi dei record della tabella principale a cui si riferisce. Come faccio ad evitarlo?
Grazie
[COLOR="Navy"]
Il problema è questo: se voglio eliminare un record da una delle tabelle satelliti, non me lo permette in quanto mi dice che la tabella principale contiene record correlati.
Non dovrebbe. La relazione 1-Molti va ad esempio impostata su TabellaPrincipale (1) e TabellaSatellite1 ( Molti ). Quale che sia l'integrità referenziale che si applica, Access non solleva alcuna eccezione se elimino un record da una tabella satellite. Almeno, a me non succede...
Guybrush Threepwood
01-03-2009, 10:19
Io in realtà ho impostato (1) su tabella satellite e (molti) su tabella principale, in quanto la tabella satellite contiene una lista di nomi che possono essere selezionati mediante menù a tendina nella tabella principale. Quindi 1 nome della tabella satellite può comparire in più record della tabella principale. Può essere questo l'errore?
Secondo me è proprio un errore concettuale di progettazione del DB, che ovviamente poi da risultati indesiderati con l'integrità referenziale...
Non so come sia il tuo DB nel dettaglio, ma posso fare un esempio semplice di quello che intendo io : mettiamo che debba fare un DB che tiene traccia di acquisti e vendite. Ho una tabella T_Persone ( id, cognome, nome, ecc... ).
E ho 2 tabelle satellite ( T_Acquisti, T_Vendite ) nelle quali sarà presente una Foreign Key "idPersona".
E' chiaramente espandibile ad N Tabelle satellite, mantenendo T_Persone centrale. Ora, è chiaro che 1 Persona-->Molte Vendite / 1 Persona-->Molti Acquisti ecc... Ma non potrà invece essere 1 Acquisto-->Molte Persone...
Perciò secondo me sarebbe illogico avere relazioni uno-molti nel senso opposto.
Guybrush Threepwood
05-03-2009, 20:45
Ciao, allora provo a descriverti in maniera molto sintetica com'è strutturato il DB considerando una sola tabella satellite per semplificare la descrizione.
C'è una tabella principale che costituisce una sorta di modulo. Ogni modulo viene aperto da un leader.
Ora, la lista di tutti i leader che possono aprire un modulo forma una delle tabelle satelliti, quindi 1 leader può aver aperto più moduli.
Quindi la relazione 1 a molti l'ho impostata (1) sulla tabella leader e (molti) sulla tabella moduli, collegando l'ID_leader della tabella leader con la foreign key ID_Leader nella tabella moduli.
Ho spuntato la casella "Aggiorna campi correlati a catena" mentre ho lasciato deselezionata la casella "Elimina record correlati a catena", ma ho i problemi descritti in precedenza
... quindi 1 leader può aver aperto più moduli.
Quindi la relazione 1 a molti l'ho impostata (1) sulla tabella leader e (molti) sulla tabella moduli, collegando l'ID_leader della tabella leader con la foreign key ID_Leader nella tabella moduli.
E' una descrizione un po' frettolosa, cmq da quello che ho capito, ripeto, se UN Leader presente in T_Leader apre MOLTI Moduli in T_Moduli, questo, unito al fatto che chi compie l'azione è il Leader, praticamente ti obbliga a modificare il DB in modo che T_Leader sia la tabella principale, e T_moduli quella satellite.
Se invece c'è anche una sola possibilità che possa esserci una relazione Molti-Molti, ossia un Leader apre 2 Moduli e un Modulo può essere aperto da 2 Leader, dovrai usare una tabella di raccordo "T_LeaderModuli", esattamente come avviene ad esempio in OrderDetails ( Tabella "dettagli sugli ordini" ) nel DB di esempio "Gestione Ordini" di Access 2003.
Guybrush Threepwood
06-03-2009, 13:23
Cerco di descrivere un po' meglio la parte iniziale del modulo perchè è abbastanza articolato.
Ho un campo "data di apertura", un altro "data di chiusura", un campo "leader", un campo "team", un campo "postazione", un campo "note", un campo "responsabile". Poi il modulo continua con un bel po' di campi, ma limitiamoci a questa parte se no diventa un macello.
Per compilare questo modulo ho poi creato una maschera e con menu a tendina vado a scegliere il leader, la postazione e il responsabile.
Per me quindi la tabella principale è quella che costituisce la tabella modulo, perchè 1 leader può comparire in più moduli, così come 1 postazione può comparire in più moduli così come pure il responsabile può comparire sempre in più moduli.
Quindi la mia tabella principale è il modulo e poi ho 7 tabelle satelliti.
Ciascuna tabella satellite l'ho collegata tramite relazione 1 (tab satellite) a molti (tab modulo).
In pratica ho una sorta di struttura a "ragno" con la tab principale al centro e le "zampe" costituire dalle tabelle satelliti collegate dalle relazioni come ti ho indicato prima.
Guybrush Threepwood
19-03-2009, 18:57
Nessun aiuto? :(
Guybrush Threepwood
20-04-2009, 20:24
up
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.