Problema con 4 tabelle 1 a M

di il
9 risposte

Problema con 4 tabelle 1 a M

Problema che mi ritrovo sempre e che in qualche caso (con vari artifizi ) ho aggirato. Questa volta proprio non ci sono per cui chiedo il Vostro aiuto.
Ho realizzato un database "Scadenziario" che ha funzionato fino ad oggi. Ora sono in difficoltà.
Per meglio spiegarmi (indico solo i campi necessari)
- Tbl Fornitori (IDFo, Fornitore)
- Tbl Fatt alias Fatture (IDFa, DataFa, N, ImpFa, idFo)
. Tbl Scad alias Scadenze (IdSc,DataSc,ImpSc,DataPE,ImpPE, idFa)........ PE significa Pagamento effettuato.
Fornitori 1 a M con Fatture
Fatture 1 a M con Scadenze
- Query Tbl Fornitori Fatture
- Maschera su Query precedente e sottomaschera Tbl Scadenze
Ulteriori due query che mi indicano, rispettivamente, le fatture in scadenza e quelle scadute e non pagate)
Ha funzionato tutto perfettamente? NO
Mi spiego:
Arriva una fattura il 06/04/2016 di 1500€, le scadenze x il pagamento concordato sono:
- € 1000 il 06/05/2016 e € 500 il 06/06/2016
Se si rispettano le scadenze tutto ok altrimenti (cosa accaduta) nasce il problema:
Alla prima scadenza (€ 1000 il 06/05/2016) invece di pagare 1000 € ne pago solo 400
Alla seconda scadenza invece di 500 ne pago 200 – Accade un po di confusione avendo le scadenze e i pagamenti effettuati nella stessa tbl.
La soluzione che ho provato a fare è stata quella (forse banale) di normalizzare il database dividendo la tbl scadenze in due tabelle, ovvero, una TBL Scadenze (IdSc,DataSc,ImpSc, idfa) e una Tbl Pagamenti (IDPag, DataPE,ImpPE, idSc)
Le Tbl sono diventate 4 e tutte in relazione gerarchica 1 a M , e cioè:
- Tbl Fornitori 1 a M con Tbl Fatture
- Tbl Fatture 1 a M con Tbl Scadenze
- Tbl Scadenze 1 a M con Tbl Pagamenti
Con quattro tbl relazionate in tal modo (1 a M tra loro) non riesco a risolvere (seppur, credo che con un un self join (suggeritomi da Alex precedentemente x la stessa domanda (per relazioni 1 a M ad albero)) risolverei. Non ho ancora questa competenza x cui chiedo il vostro aiuto per risolvere piu semplicemente (alla mia portata)

9 Risposte

  • Re: Problema con 4 tabelle 1 a M

    Volevo aggiungere una cosa - Il problema l'ho risolto in un modo che proprio non mi piace:
    Query tbl fornitori-Fatture
    Maschera 1 ( query precedente)
    2 maschera scadenze con sottomaschera pagamenti
    3 - inserimento della maschera 2 nella maschera 1 .
    Chiaro che funziona ma proprio non mi piace - Cercavo un'alternativa un poco poco più seria (in pratica piu leggibile) anche xchè il problema delle 4 tabelle (e piu) in R 1 a M è cosa seria ed interessante
  • Re: Problema con 4 tabelle 1 a M

    Volevo solo chiederVi, se la strada che ho intrapreso è corretta:
    per essere chiaro allego relazioni e maschera.
    Interpretando in qualche modo i vari suggerimenti avuti in precedenza e, un po a tentoni, ho fatto cosi:
    Tbl Fornitori 1 a M con Tbl Fatture (n° fattura, data fattura ..... idFo)
    Tbl Fatture 1 a M con Tbl Scadenze (nel senso che per ogni importo di fattura posso avere piu scadenze e per ogni scadenza (1) Molti pagamenti) -

    Le Tbl sarebbero le solite 4 in relazione 1 a M l'una con l'altra - ( Cosa x me complicata da gestire)
    ---
    Nella Tbl scadenze ho inserito i campi della tbl Pagamenti
    TblScad -( IDscad,DataSca,ImpScad,IdPag,DataPE, ImpPE, idFa)

    Nel riquadro Relazioni ho inserito 2 volte la Tbl Scadenze - Ora ho 2 Tbl identiche Scad e Scad_1 in relazione 1 a M - Idscad (tabScad) con l'IDpag(tab scad_1). Ma è vero anche l'opposto ovvero IDScad (tblScad_1) con idpag(tbScad). Le relazioni sono quelle postate.
    Ho creato una Query tra TblScad e Tbl Scad_1 come illustrata.
    Cosi x maschera
    Pare funzioni - Che ne pensate? la strada è giusta o sballata ?
    Allegati:
    17466_1e368124054f39c3603779c8ec542f72.jpg
    17466_1e368124054f39c3603779c8ec542f72.jpg

    17466_86799ff25b16e536ad42a67a6901327d.jpg
    17466_86799ff25b16e536ad42a67a6901327d.jpg

    17466_06474187ed61d2f9c6fdee350699ef66.jpg
    17466_06474187ed61d2f9c6fdee350699ef66.jpg
  • Re: Problema con 4 tabelle 1 a M

    Le relazioni non si leggono
    Allegati:
    17466_f6ed3a1b0ae78882fc2c070f01407c92.jpg
    17466_f6ed3a1b0ae78882fc2c070f01407c92.jpg
  • Re: Problema con 4 tabelle 1 a M

    Io non ho capito a cosa serve la tabella Scad_1.
    Le altre 3 sono corrette.
  • Re: Problema con 4 tabelle 1 a M

    In verità, manco io ci sto capendo molto, però in tal modo forse risolvo. Il problema è sempre quello delle 4 tbl in relazione 1 a M
    Ho fornitore 1 a M con Fatture
    Fatture 1 a M con Scadenze
    Scadenze 1 a M con pagamenti
    Questione che non riesco a risolvere per cui cosa ho fatto: ho de-normalizzato il database
    Ho raggruppato in un'unica tbl le scadenze e i pagamenti.
    La nuova Tbl (Scad) l'ho inserita due volte e relazionate come da allegato
    Dalla Tbl scad_1 prelevo (con query) i valori dei campi della Tbl pagamenti (che non c'è più)
    Dalla Tbl Scad prelevo i campi delle vecchia Tbl scadenza (che non c'è piu)
    Cosi facendo non ho piu 4 tbl in relazioone gerarchica 1 a M
    1 -In pratica se ho una Tbl A e una Tbl B tale che A è in R 1 a M con B posso creare una maschera A con sottomaschera B.
    2 -Creo una nuova TBL C che contiene i campi di A e B
    Creo una relazione tra C e se stessa (la chiave principale diventa chiave secondaria nella tabella copia, e viceversa)
    Creo una query tra la Tbl C e la sua (diciamo) copia dalla quale prelevo solo i campi appartenenti alla precedente Tbl B
    Provo a fare una maschera su C utilizzando, di quest'ultima, solo i campi della precedente Tbl A e come sottomaschera la Query (precedentemente creata prelevando i campi dalla Tbl B),

    La maschera con sottomaschera creata secondo lo schema 1, è perfettamente identica alla maschera e sottomaschera creata con lo schema 2.
    Funzionano entrambe.

    Questo è quello che ho fatto

    Altro non saprei dirti
  • Re: Problema con 4 tabelle 1 a M

    Il problema piuttosto è nelle tabelle. Schema 1 - Tab A su segno + e vedo i record correlati
    Schema 2 - Tab C su segno + e non si capisce nulla
    Bho.....
  • Re: Problema con 4 tabelle 1 a M

    Per me tu devi avere solo 3 tabelle. Solo eliminando Scad_1 avresti le idee più chiare e qualche meccanismo automatico che dovrebbe funzionare correttamente. Quindi prima elimina la relazione a destra e poi elimina la tabella Scad_1.
    Se vuoi ragionare con le sole tabelle e il +, talvolta non è detto che l'impostazione di default sia sempre coerente e magari devi essere tu a impostare. L'impostazione del + si chiama "foglio dati secondario". Cercane le sue impostazioni e controlla che
    Collega campi secondari
    Collega campi master
    abbiano lo stesso nome dei corrispondenti campi chiave.

    Per maschera/sottomaschere, puoi decidere tu come visualizzare gerarchicamente. Se preferisci partire da Fornitori--->Fatture--->Scadenze metti in atto una procedura guidata di creazione maschera/sottomaschere su questi 3 livelli. Potresti anche pensarla solo Fatture--->Scadenze e servirti di una casella combinata IDFornitore in Fatture.

    Credo che non ti serva alcuna query in questa prima fase progettuale.
  • Re: Problema con 4 tabelle 1 a M

    Il mio problema è quello di gestire 4 tabelle a cascata in relazione uno a molti tra loro. Fornitore - fatture - scadenze - pagamenti.
    Ho avuto già un autorevole suggerimento da Alex sulla gestione di questo schema di relazioni ma non ho le competenze per apprenderlo appieno. Ecco xchè chiedevo un Vostro aiuto sulla correttezza della strada intrapresa.
    Il problema è postato al seguente Link
    https://www.iprogrammatori.it/forum-programmazione/access/tabelle-maschera-t27398.html
  • Re: Problema con 4 tabelle 1 a M

    Ho riletto la risposta di Alex
    Messaggioda @Alex » 16 mar 2016, 14:54
    Se nel Diagramma Relazionale(EPR) di Access aggiungi 2 volte la stessa Tabella... ottieni la possibilità di effettuare una SELF-REFERENCING.
    Nel caso di gerarchia, la 1° la usi per il Legame PADRE e la 2° per il Legame Figlio.
    Non hai modo, nè serve, fare altro in quanto così facendo l'unico dato condiviso è la PK della tabella che diventa FK nella lato Dettaglio.
    Bha... forse ci sono (un pochino).
Devi accedere o registrarti per scrivere nel forum
9 risposte