Newsgroup: it.comp.appl.access
Titolo: Relazioni - Vorrei mantenere l'integrità referenziale   con chiave esterna Null

Prima di tutto un saluto a tutti i partecipanti a questo NG
Per Normalizzare un data base in via di realizzazione mi è sembrato utile
creare una tabella relazionata Molti a Uno con una tabella primaria ed Uno
ad Uno con un'altra tabella;
La tabella avrà due campi chiavi esterne per i link alle due tabelle, in
questo modo ogni record di questa tabella sarà relazionato ad una O
all'altra tabella, quando il record è relazionato ad una tabella, 
il campo chiave esterna relazionato all'altra tabella avrà valore Null. 
Vorrei mantenere in entrambi i casi l'integrità referenziale e consultando
l'Help ho visto che è possibile anche se ad un certo punto cita:
[È possibile, comunque, immettere un valore Null nella chiave esterna,
specificando che i record non sono correlati alla tabella primaria pur
mantenendo l'integrità referenziale].
Non capisco cosa intenda con [Specificando che...] dove si specifica?
Ho fatto delle prove e sembra che la cosa funzioni, volevo però domandare
se l'impostazione che voglio dare è consigliabile, per normalizzare al
massimo il DB.
Prevedo che l'utilizzo di più tabelle da aprire e chiudere in una maschera
mi complicherà un pò la vita a livello di codice e prima di buttarmici
vorrei un aiuto per capire se questa è la strada corretta.
Le domande sulla struttura, essendo in fondo comuni a tutti i data base
relazionali sono per caso [OT]?
Saluti a tutti
Prometeo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Prometeo
Ciao,
Massimo 

 > Prometeo
Ciao Massimo e grazie per la risposta
Per quanto riguarda le relazioni uno a molti penso di non avere problemi,
mentre non mi è capitato di dover usare quelle di tipo uno a uno.
La mia domanda è stata forse un pò ermetica, cerco di spiegarmi meglio, è
la tabella dal lato molti a dover avere una relazione uno a uno con una
terza tabella cioè non
TblUno 1 -oo TblDue
TblUno 1-1 TblTre
   ma invece 
TblUno 1 -oo TblDue  
TblDue 1-1 TblTre
Nel concreto ho:
Tabella T_Origine
Tabella T_Transazioni
Tabella T_Progetti
Tabella T_Trasferimenti
La Tabella T_Origine contiene i dati relativi ad una proprietà che sarà
frazionata, venduta e utilizzata è relazionata alla tabella T_Transazioni
uno a molti e su di loro si baserà una maschera con sottomaschera
detto questo penso che possiamo ignorarla per quanto riguarda il problema
di cui stiamo discutendo.
La Tabella T_Progetti è relazionata Uno a molti con la Tabella
T_Transazioni
La Tabella T_Transazioni è relazionata Uno a Uno con la Tabella
T_Trasferimenti
Questo perchè la  transazione può essere di due tipi: TRASFERIMENTO o
UTILIZZO. 
Per ogni transazione devono essere registrati oltre ai dati relativi alle
quantità ed ai codici di acquirenti e venditori anche alcuni "Dati
Aggiuntivi" relativi alle registrazioni notarili se trasferimento o
progettuali se utilizzo.
Una o più transazioni possono essere collegate ad un progetto  ma solo se
sono del tipo UTILIZZO e in questo caso i dati aggiuntivi sono quelli del
Progetto.
Se invece la transazione è un TRASFERIMENTO non vi è relazione con la
tabella Progetti, ma i "Dati Aggiuntivi" devono essere registrati
ugualmente.
Dunque creo  una tabella T_Progetti relazionata uno a molti tramite [ID]
al campo [Link_Progetto] della tabella T_Transazioni.
Qui insieme agli altri dati del progetto saranno inseriti i "DATI
AGGIUNTIVI".
Ci sarà relazione solo per le transazioni di tipo UTILIZZO.
Per tutti i records della tabella T_Transazioni di tipo TRASFERIMENTo devo
registrare i dati aggiuntivi ma se usassi la tabella stessa avrei campi
vuoti per tutti i records di tipo UTILIZZO, quindi ho bisogno di una terza
tabella T_Trasferimento relazionata uno a uno tramite il suo [ID] al campo
[Link_Trasferimento] della tabella T_Transazioni.
per creare la relazione uno a uno, [Link_Trasferimento] dovrà essere
indicizzato [duplicati non ammessi].
A questo punto T_Transazioni avrà in tutti i records tipo UTILIZZO il
campo [Link_Trasferimento] con valore null
e in tutti i records tipo TRASFERIMENTO il campo [Link_Progetto] con
valore null ma in questo modo non ci saranno dati ripetuti o campi vuoti. 
I dati aggiuntivi da visualizzare nella sottomaschera sono dello stesso
tipo in entrambi i casi quindi posso visualizzarli utilizzando la funzione
IIF o DLookup.
Se come dice l'Help, i records con il campo Chiave esterna Null non
vengono considerati relazionati, non vedo perchè ciò non debba essere
valido anche nelle relazioni Uno a Uno e da qualche prova fatta sembra
funzionare, soltanto prima di procedere volevo il parere di qualcuno che
abbia già affrontato questo genere di problema.
Per essere più chiaro provo ad allegare l'immagine delle relazioni in
questione.
Può funzionare, ma soprattutto in alternativa come faccio a normalizzare?
Ciao e grazie
Prometeo 
Guarda l'immagine cliccando 
http://attach.mynl.it/img?id=MTY5NQ


 Prometeo
Ho preferito farti una "breve" spiegazione di come normalizzare, spero che 
lo apprezzerai anche se a quest'ora il mio ialiano non è un gran che.
Ciao,
Massimo

 Massimo
Lo apprezzo tantissimo e ti ringrazio nuovamente
Ciao
Prometeo
