Relazione uno a molti

di il
15 risposte

Relazione uno a molti

Salve a tutti, ho un problemino con una relazione tra tabelle che non riesco a risovere.
Ho l'esigenza di sapere quali acquirenti hanno visto un determinato immobile sapendo che un immobile puo avere molti (potenziali) acqurenti , e al tempo stesso un acquirente puo aver visto piu immobili.
Ho creato due tabelle, Venditori e acquirenti, poi le ho messe in relazione tra di loro con una relazione uno a molti sul campo ID_Venditore (che è anche la chiave primaria della tabella venditori) con un campo numerico sulla tabella acquirenti ID_vend
Poi ho creato una maschera con relativa sottomashera e ogni volta che un acquirente vede un determinato immobile basta inserire nel campo ID_vend il codice del venditore (chiave primaria) fin qui tutto bene, ma nel pasticcio che ho creato mi sono accorto che un acquirente puo vedere un solo immobile. dove sto palesemente sbagliando?
invio immagine maschera
Grazie
Allegati:
13777_4fa2a09e61852d6657fab46964975f39.jpg
13777_4fa2a09e61852d6657fab46964975f39.jpg

15 Risposte

  • Re: Relazione uno a molti

    Io dico che un Immobile può essere visitato da molti Acquirenti. Un Acquirente può visitare molti Immobili. Questo significa che Acquirenti e Immobili sono in relazione molti-a-molti. Devi prevedere una tabella di congiunzione Visite che collega Acquirenti e Immobili.
    La tabella Venditori dovrebbe essere sostituita da Immobili.
  • Re: Relazione uno a molti

    Ok posso anche sostituire la tabella ma il problema di relazione tra le due tabelle rimane, non so come creare la relazione molti a molti e poi non so dove inserire il dato che relaziona le tabelle. facendo un esempio pratico una volta che ho inserito il dato nel campo creato ovvero ID immobile, poi nel caso di altro immobile visitato dallo stesso cliente Dove inserisco il dato?
  • Re: Relazione uno a molti

    Al di là della struttura del tuo db, se ad ogni venditore (che mi pare di aver capito sarebbe il proprietario e non l'agente che vende) puoi inserire un solo acquirente, allora palesemente trattasi di una relazione uno a uno e non uno a molti.
    Poi ho creato una maschera con relativa sottomashera e ogni volta che un acquirente vede un determinato immobile basta inserire nel campo ID_vend il codice del venditore (chiave primaria) fin qui tutto bene
    Forse qui non va proprio bene.
    ID_vend il codice del venditore (chiave primaria)
    di quale tabella?
    Anche della tabella acquirenti?
  • Re: Relazione uno a molti

    Tu devi avere il seguente scenario tabelle:

    Immobili
    IDImmobile (contatore, chiave primaria)
    Mq
    Indirizzo
    ...ci metti tutti i campi tipici per identificare un immobile (questo lo sai meglio di me)

    Acquirenti
    IDAcquirente (contatore, chiave primaria)
    Nome
    Cognome
    ...altri campi anagrafici

    Visite
    IDVisita (contatore, chiave primaria)
    DataVisita
    IDImmobile (numerico)
    IDAcquirente (numerico)
    ...altri campi eventuali

    Relazioni:
    Immobili.IDImmobile uno-a-molti con Visite.IDImmobile
    Acquirenti.IDAcquirente uno-a-molti con Visite.IDAcquirente

    Quando crei le relazioni uno-a-molti nella finestra Relazioni, abbi cura di mettere sempre la spunta su "Applica integrità referenziale".

    mgabrio ha scritto:


    facendo un esempio pratico una volta che ho inserito il dato nel campo creato ovvero ID immobile, poi nel caso di altro immobile visitato dallo stesso cliente Dove inserisco il dato?
    Questo lo ottieni sfruttando la tabella Visite.
    Se osservi bene la gerarchia delle tabelle, Immobili e Acquirenti sono di un livello superiore rispetto a Visite. Tu puoi decidere di vedere le Visite dal punto di vista di un Immobile visitato da molti Acquirenti, oppure un Acquirente che visita molti Immobili. Potresti organizzare 2 maschera/sottomaschera:
    Immobili/Visite
    Acquirenti/Visite

    Nella tabella Visite non si esclude che uno stesso Acquirente visiti lo stesso Immobile in molte date diverse: questo nella realtà accade spesso e volentieri. Magari potresti aggiungere un campo Note (forse di tipo Memo) dove indichi le impressioni che l'Acquirente avrebbe sviluppato.
  • Re: Relazione uno a molti

    GRANDE !!!! fin qui tutto bene ho creato la nuova tabelle visite ed ho creato le giuste relazioni, ho creato le maschere/sottomaschere relative, ora però non riesco a fare in modo, ad esempio che sulla maschera immobili con sottomaschera acquirenti (che io ho gia caricato sulla tabella visite relazionando i due ID ), appaia anche il nome dell'acquirente nella sottomaschera senza doverlo scrivere ogni volta
  • Re: Relazione uno a molti

    mgabrio ha scritto:


    maschera immobili con sottomaschera acquirenti
    Attento. Cosa hai scritto o fatto? Questa situazione è impossibile da verificarsi. Io ti ho parlato di 2 maschera/sottomaschera con 2 procedure guidate diverse dove devi ottenere 2 effetti visivi diversi:
    maschera Immobili/sottomaschera Visite
    maschera Acquirenti/sottomaschera Visite
    Accadrà molto probabilmente che, siccome avresti 2 sottomaschere Visite con lo stesso nome, Access suggerisca la seconda volta di nominare "Visite1 sottomaschera", ma non cambia la sostanza.
  • Re: Relazione uno a molti

    Scusa ho scritto male ma ho fatto giusto. Per il momento ho solo fatto la prima maschera con immobili e sottomaschera visite acquirenti, funziona ma scusa la banalità come faccio a visualizzare anche il nome acquirente (nella sottomaschera) oltre al suo ID senza doverlo digitare sul campo che ho creato (nome acquirente). peccato non poter allegare il file di esempio... sarebbe piu semplice
  • Re: Relazione uno a molti

    OK. La scelta maschera/sottomaschera Immobili/Visite mi sembra la più pertinente.

    mgabrio ha scritto:


    come faccio a visualizzare anche il nome acquirente (nella sottomaschera) oltre al suo ID
    Domanda leggittima a un problema molto noto e ricorrente. Si risolve con la costruzione di una "casella combinata". Puoi leggere infiniti thread su come creare una "buona casella combinata", oppure scarica questo mio documento. Ti consiglio il caso che parla proprio di Cognome e Nome
    http://www.divshare.com/download/24207510-16

    Poi, so già che mi chiederai: Ma se un Acquirente non ce l'ho in lista come faccio? Anche questo è un caso tipico e ti consiglio di dare un'occhiata a quest'altro documento
    http://www.divshare.com/download/24207511-a9
    Nel tuo caso A=Immobili; B=Acquirenti; C=Visite.
  • Re: Relazione uno a molti

    Abbi tanta pazienza sono tardo..... l'esempio è chiaro ma non riesco a mettere in relazione i campi dell'esempio con i miei, e poi non ho capito dove devo creare la casella combinata...
  • Re: Relazione uno a molti

    Il campo IDAcquirente che sta nella sottomaschera Visite deve guardare l'IDAcquirente della tabella Acquirenti. Dal mio documento devi prendere spunto dal caso C, quindi parallelamente:
    Autori = Acquirenti
    IDAutore = IDAcquirente
    Cognome e Nome sono identici, la sintassi da scrivere sul secondo campo è identica.
    Nomina la query AcquirentiOrdinati
    ...scusa sul documento c'è un errore...perchè...tu devi costruire la casella combinata sul campo IDAcquirente che sta nella sottomaschera Visite. In Origine riga devi scrivere AcquirentIOrdinati.
  • Re: Relazione uno a molti

    OsvaldoLaviosa ha scritto:



    Poi, so già che mi chiederai: Ma se un Acquirente non ce l'ho in lista come faccio? Anche questo è un caso tipico e ti consiglio di dare un'occhiata a quest'altro documento
    http://www.divshare.com/download/24207511-a9
    Nel tuo caso A=Immobili; B=Acquirenti; C=Visite.
    Intanto ti ringrazio per i tuoi rapidi e preziosissimi consigli, e poi ti volevo chiedere cosa intendi non avere già un acquirente in lista. Se intendevi non avere già il record caricato in db la risposta è no, prima si aggiorna la tabella acquirenti ( da tabella o da apposita maschera) ,e poi si relaziona l'ID acquirente con l'ID venditore , ed è qui che volevo chiederti come potevo fare per inserire le due relazioni senza andare neccessariamente nella tabella visite e scrivere i due codici.
    Allegati:
    13777_e214cd635d9558f3f99d71bbb4774580.jpg
    13777_e214cd635d9558f3f99d71bbb4774580.jpg
  • Re: Relazione uno a molti

    mgabrio ha scritto:


    cosa intendi non avere già un acquirente in lista. Se intendevi non avere già il record caricato in db la risposta è no, prima si aggiorna la tabella acquirenti ( da tabella o da apposita maschera) ,e poi si relaziona l'ID acquirente con l'ID venditore
    OK, come non detto.

    mgabrio ha scritto:


    è qui che volevo chiederti come potevo fare per inserire le due relazioni senza andare neccessariamente nella tabella visite e scrivere i due codici.
    Hai detto di aver creato maschera/sottomaschera Immobili/Visite. Questo look sincronizzato ti permette di inserire i valori più facilmente. Di conseguenza non ha più senso lavorare con la sola tabella Visite. La tabella Visite serve solo a tenere traccia di tutti i tuoi inserimenti dati. Deve comunque rimanere lì, altrimenti la maschera non sa da dove andare a prendere i dati che attualmente vedi.
    Per me sta tutto fatto bene. Non devi fare più nulla di particolare.
  • Re: Relazione uno a molti

    OsvaldoLaviosa ha scritto:


    Per me sta tutto fatto bene. Non devi fare più nulla di particolare.
    ... sono ad un punto morto non riesco a farmi restituire il valore che vorrei, o meglio mi restituisce solo una parte, ovvero solo il contenuto di visite.
    Posso via Email o come vuoi trasferirti un esempio per rendere più comprensibile la cosa o preferisci di no?
    Non voglio farmi correggere i compiti a casa ma mi accorgo che con tutta la buona volontà mi sfuggono un po di cose
  • Re: Relazione uno a molti

    Relazioni:
    Immobili.IDImmobile uno-a-molti con Visite.IDImmobile
    Acquirenti.IDAcquirente uno-a-molti con Visite.IDAcquirente

    Quando crei le relazioni uno-a-molti nella finestra Relazioni, abbi cura di mettere sempre la spunta su "Applica integrità referenziale".
    Ma queste due cose le hai fatte?
    L'immagine che hai allegato è sfocata e non si capisce nulla.
Devi accedere o registrarti per scrivere nel forum
15 risposte