Relazione tra tre tabelle, è possibile?

di il
14 risposte

Relazione tra tre tabelle, è possibile?

Buonasera a tutti,

mi chiamo Marco, sono nuovo nel mondo dei forum, per cui chiedo scusa già da subito se sto infrangendo una qualche regola, ma soprattutto sono nuovo per quel che riguarda il mondo di Access, programma che sto avendo il piacere di sperimentare da un paio di mesi a questa parte. Vengo al dunque:

Sto cercando di creare un database per la mia azienda che dovrebbe correlare, almeno per quello che è la mia idea, tre differenti tabelle:

Tabella Aziende: dove sono presenti numerose aziende e i relativi dati (indirizzo, settore, ecc.)
Tabella Contatti: una sorta di rubrica dove sono presenti i contatti relativi alle aziende (ogni contatto può essere correlato a più aziende e viceversa, quindi relazione molti a molti)
Tabella stages: dove vengono registrati i nominativi di alcune persone che vengono inviate a fare degli stages sempre relativi alle aziende di cui sopra (quindi molti stages a una sola azienda).

Questo DB avrebbe come obiettivo quello di facilitare l'inserimento di una nuova azienda utilizzando una maschera che raggruppi le tre tabelle (fin qui non ho avuto grossi problemi), ma soprattutto quello di offrire una panoramica di tutte le aziende presenti che rappresentino anche i rispettivi contatti e gli stage già registrati con la possibilità di poter filtrare le aziende in base a determinati campi (p.es. il luogo, il settore, o il nome di uno stagiaire).

Non ho idea di come strutturare il tutto per raggiungere questo ultimo passaggio. Non riesco a capire se la soluzione è talmente banale da non riuscire a vederla o talmente complicata da richiedere competenze decisamente fuori dalla mia portata...


Spero di essere riuscito a spiegarmi e vi ringrazio in anticipo per qualsiasi aiuto possiate darmi
Saluti
Marco

14 Risposte

  • Re: Relazione tra tre tabelle, è possibile?

    Marcof ha scritto:


    Tabella Contatti: una sorta di rubrica dove sono presenti i contatti relativi alle aziende (ogni contatto può essere correlato a più aziende e viceversa, quindi relazione molti a molti)
    Questa cosa non mi è chiara. Potresti fare qualche esempio che giustifichi ciò?

    Marcof ha scritto:


    Tabella stages: dove vengono registrati i nominativi di alcune persone che vengono inviate a fare degli stages sempre relativi alle aziende di cui sopra (quindi molti stages a una sola azienda).
    Una Azienda può fare molti Stages. Puoi chiarire con esempi e/o nomi propri di campi perchè molti Stages a una sola Azienda?

    Per le relazioni usi i campi ChiavePrimaria (PK) uno-a-molti ChiaveEsterna (FK)? Se sì puoi indicarceli con i loro nomi propri?

    Se puoi esplicitare tutti i campi di ogni tabella, rendi più chiara l'esposizione.
  • Re: Relazione tra tre tabelle, è possibile?

    Quando parli di Relazione Molti-Molti hai chiaro il concetto di come si realizza...?
    Siccome poi parli di 3 Tabelle e non comprendo se la Tabella [Stages] è quella che si usa per relazionare Aziende-Contatti per realizzare la M-M o se ho frainteso...

    Quello che chiedi poi omette qualche aspetto funzionale...
    Se ipotiziamo 3 Maschere, ognuna associata alle tabelle, Aziende/Contatti/Stages, beh risulta improbabile avere una visione coerente della realtà...
    A SX hai Aziende, in centro hai Stages ed a Dx hai Contatti... cosa ti aspetti di vedere...?

    Io a SX mi aspetto di vedere TUTTE le aziende, in centro TUTTI gli Stagisti inseriti in tabella magari doppi o tripli proprio perchè come dicevi uno stegista può andare in Molte aziende, ed a DX l'elenco dei contatti.

    Se vuoi generare una visualizzazione coerente serve capire cosa vuoi visualizzare, perchè la tabella Stages a seconda di come la guardi potrebbe visualizzare le Aziende in cui PincoPallino è inserito, oppure mostrare gli Stegisti presenti in FIAT.
    Questo ovviamente se, la Maschera centrale(Stages) fosse FILTRATA da una SELEZIONE della Maschera di DX o di SX.

    Quindi chiarisciti cosa vuoi vedere e come...

    P.S. le Maschere che mostrano TUTTO non sono mai una bellissima idea... ma lo scoprirai con il tempo.
  • Re: Relazione tra tre tabelle, è possibile?

    Salve Alex e OsvaldoLaviosa e grazie per le immediate risposte.

    Questa cosa non mi è chiara. Potresti fare qualche esempio che giustifichi ciò?
    La Fiat potrebbe avere Mario Rossi come Direttore e Francesco Bianchi come Vicedirettore, quindi due o più contatti di riferimento.
    Francesco Bianchi potrebbe essere al contempo impiegato con un'altra funzione presso un'altra azienda.
    Puoi chiarire con esempi e/o nomi propri di campi perchè molti Stages a una sola Azienda?
    Perchè presso la Fiat, potrei inviare Tizio a fare uno stage formativo oggi, poi Caio tra un mese, ecc. Quindi più stages ad una singola azienda.
    Quando parli di Relazione Molti-Molti hai chiaro il concetto di come si realizza...?
    So che bisogna collegarle tramite una terza tabella che contenga i nomi delle chiavi primarie (con formato numerico) delle due tabelle da collegare.
    Io a SX mi aspetto di vedere TUTTE le aziende, in centro TUTTI gli Stagisti inseriti in tabella magari doppi o tripli proprio perchè come dicevi uno stegista può andare in Molte aziende, ed a DX l'elenco dei contatti.
    Una soluzione del genere di per sé potrebbe essere già ideale.
    La mia idea è quella di ottenere una sorta di motore di ricerca che mi permetta di cercare una determinata azienda in base al nome della stessa, o al nome di uno stagiaire che so di avere inviato in passato presso quell'azienda, o di filtrare tutte le aziende che ho in DB, per esempio, a Milano e così via.
    Cliccando poi sul nome dell'azienda trovata, vorrei visualizzare un riepilogo che contenga il/i contatto/i di riferimento di quell'azienda ed eventuali stagiaire che ha già accolto in passato.
  • Re: Relazione tra tre tabelle, è possibile?

    Marcof ha scritto:


    Quando parli di Relazione Molti-Molti hai chiaro il concetto di come si realizza...?
    So che bisogna collegarle tramite una terza tabella che contenga i nomi delle chiavi primarie (con formato numerico) delle due tabelle da collegare.
    Dove sarebbe quindi la Tabella... dal momento che con gli esempi che porti non si tratta della Tabella Stages...?

    Per il "motore di ricerca" che hai nominato... credo ti sfugga che le 2 ricerche poggiano su 2 Tabelle differenti, oltretutto cerchi per un Descrittivo(Nome Azienda o Ragione Sociale) ma in realtà Filtri per IdAzienda, e sempre cerchi per "Cognome" staginsta ma Filtri per IdContatto...
    Questo dovrebbe farti capire che, per la ricerca dell'azienda la cosa più semplice è usare una ComboBox con l'elenco delle aziende, e, filtrare la Maschera Aziende su DopoSelezione della Combo.
    Mentre per la ricerca del Contatto, devi usare una Combo basata sulla Tabella Stages in Join con la Tabella Contatti, così cercherai solo tra i Contatti in Stages e non tra tutti... e dovrai andare a Filtrare la Query su cui si basa la Maschera Stages(perchè non sarà basata sulla sola Tabella ma avrai in JOIN sia Contatti che Aziende) per visualizzare i dati filtrati.

    Il tutto è come dicevi MOLTO BANALE, serve avere le idee chiare.
  • Re: Relazione tra tre tabelle, è possibile?

    La tabella di collegamento non l'ho menzionata perché in realtà non viene utilizzata direttamente, l'ho creata solo ed appositamente per collegare le tabelle "Aziende" e "Contatti", ho fatto giusto?

    Mi sfugge ancora come far comunicare la tabella "Stages" con le altre due, per il resto spero di aver capito tutto.

    Mi rendo conto che le mie domande possano sembrar banali, ma come ho detto mi sono addentrato nel mondo di access da poco e da autodidatta e di tentativi prima di chiedere il vostro aiuto ne avrò fatti una cinquantina

    Rinnovo i ringraziamenti
  • Re: Relazione tra tre tabelle, è possibile?

    Marcof ha scritto:


    La tabella di collegamento non l'ho menzionata perché in realtà non viene utilizzata direttamente, l'ho creata solo ed appositamente per collegare le tabelle "Aziende" e "Contatti", ho fatto giusto?
    Se c'è in qualche modo va pur compilata.

    Per tutto il resto sarebbe meglio che tu mostri una immagine della Finestra Relazioni oppure descrivi dettagliatamente così:
    Tabella1
    IDTabella1 (PK)
    CampoA
    CampoB
    CampoC

    Tabella2
    IDTabella2 (PK)
    CampoD
    CampoE

    cioè:
    - nomi propri di tutte le tabelle con i nomi propri di tutti i loro campi, indicando la chiave primaria
    - indica anche i campi chiave esterna
    - le relazioni
  • Re: Relazione tra tre tabelle, è possibile?

    Ecco l'immagine delle relazioni:
    Allegati:
    31880_bfcedc218ca0bb8023e22fd5220d0290.jpg
    31880_bfcedc218ca0bb8023e22fd5220d0290.jpg
  • Re: Relazione tra tre tabelle, è possibile?

    Potresti spiegare il significato dei campi NContatto, CContatto, Funzione?
    Occorre una lina di join TBLAziende.IDAzienda uno-a-molti TBLStage.IDAzienda.
  • Re: Relazione tra tre tabelle, è possibile?

    Potresti spiegare il significato dei campi NContatto, CContatto, Funzione?
    Semplicemente NomeContatto, CognomeContatto Funzione (all'interno dell'azienda, per esempio impiegato, o direttore, o resp. RU, ecc)
  • Re: Relazione tra tre tabelle, è possibile?

    Io per Contatti avevo capito tutt'altro. Credo che Persone o Dipendenti sarebbe stato più felice come denominazione.
    I campi NPart e CPart significano NomePartecipante, CognomePartecipante? Se sì, sono gli stessi di TABContatti oppure possono essere anche altri?

    Marcof ha scritto:


    Funzione (all'interno dell'azienda, per esempio impiegato, o direttore, o resp. RU, ecc)
    La Funzione è rigida/strettamente legata alla Persona? Rossi Mario potrebbe essere Impiegato in AziendaA, mentre è Direttore in AziendaB?
  • Re: Relazione tra tre tabelle, è possibile?

    I campi NPart e CPart significano NomePartecipante, CognomePartecipante? Se sì, sono gli stessi di TABContatti oppure possono essere anche altri?
    Esatto, NPart e CPart stanno per Nome e Cognome Partecipante, ma non hanno nulla a che vedere con i Contatti che, come hai detto te, altro non sono che dipendenti (o titolari) delle aziende della TBL Aziende.
    Inizialmente avevo pensato di implementare i campi della TBL Contatti nella TBLAziende, ma sorgeva un problema quando i contatti di riferimento di un'azienda erano 2+
    Rossi Mario potrebbe essere Impiegato in AziendaA, mentre è Direttore in AziendaB?
    Esatto, Rossi Mario potrebbe essere impiegato di un'azienda A e direttore di un'azienda B
  • Re: Relazione tra tre tabelle, è possibile?

    Io rivedrei tutta la struttura così, con denominazioni più coerenti:
    Aziende
    IDAzienda (PK)
    NomeAzienda
    Indirizzo
    ...altri campi...

    Persone
    IDPersona (PK)
    Nome
    Cognome
    Cellulare
    email

    Eventi
    IDEvento (PK)
    DataEvento
    TipoEvento (qui dici se si tratta di Collocamento/Attribuzione per le assunzioni, Stage se si tratta di Stage)
    DescrizioneEvento
    IDAzienda (FK)

    Partecipazioni
    IDPartecipazione (PK)
    IDPersona (FK)
    IDFunzione (FK)
    IDEvento (FK)

    Funzioni
    IDFunzione (PK)
    Funzione

    Relazioni:
    Aziende.IDAzienda uno-a-molti Eventi.IDAzienda
    Eventi.IDEvento uno-a-molti Partecipazioni.IDEvento
    Persone.IDPersona uno-a-molti Partecipazioni.IDPersona
    Funzioni.IDFunzione uno-a-molti Partecipazioni.IDFunzione
  • Re: Relazione tra tre tabelle, è possibile?

    Buongiorno a tutti e grazie a OsvaldoLaviosa per il prezioso suggerimento, probabilmente è proprio quello di cui avevo bisogno.
    Dico probabilmente perché devo prima ritagliami il tempo per riuscire a mettere in pratica, vi do un feedback di conferma al più presto.

    Buona giornata e buon lavoro a tutti.

    Marco
  • Re: Relazione tra tre tabelle, è possibile?

    Eccomi, scusate il ritardo.

    Ho fatto come suggerito, ho solo dovuto fare qualche modifica strutturale per ragioni che non sto a spiegarvi, ma comunque funziona!
    Grazie infinite per il vostro prezioso aiuto.

    Marco
Devi accedere o registrarti per scrivere nel forum
14 risposte