Chiarimento di nozioni - relazioni

di il
7 risposte

Chiarimento di nozioni - relazioni

Buonasera a tutti,
mi chiamo Andrea e sono approdato proprio in questo momento sul Forum (non ho trovato una sezione di presentazione). Per motivi di lavoro mi sono trovato ad avere come unica soluzione l'utilizzo di un DTBS ed Access (utilizzo la versione 2007) sembra essere quello più personalizzabile.
Premetto che sono alle prime armi e come inizio sto studiando su un manuale un po' datato (ho preso in considerazione l'acquisto di un libro suggerito nella sezione) - sto seguendo passo passo i consigli dettatomi dal manuale fino a che non sono arrivato ad un punto che, per procedere, ho bisogno di avere delle lucidazioni sperando di trovare risposta qua.
Come prima cosa ho definito entità e campi - come passo successivo mi viene suggerito di descrivere le relazioni e qui nasce un dubbio: parlando con un ingegnere mi ha detto che lui ha programmato un DTBS senza descrivere queste relazioni ma andando direttamente a scrivere delle query - cosa comporta descrivere o meno queste relazioni? 1 a molti, molti a molti, uno a uno.
E ancora: per una relazione molti a molti tra due tabelle viene altamente consigliato di realizzare una terza tabella, detta di collegamento, per splittare la suddetta relazione in due relazioni uno a molti e fino a qui risulta molto chiaro. Dando un'occhiata al support della Microsoft viene detto di inserire nella terza tabella i due campi ID delle due tabelle primarie, quello che non riesco a giustificare è come mai questi due campi ID aggiunti nella terza tabella devono assumere il vincolo di chiave primaria?

Spero di essere stato chiaro e mi auguro di non aver infranto alcuna regola del regolamento.
In attesa di una vs. risposta colgo l'occasione per ringraziarvi anticipatamente.

Saluti,
Andrea.

7 Risposte

  • Re: Chiarimento di nozioni - relazioni

    Andrea_7 ha scritto:


    ... come passo successivo mi viene suggerito di descrivere le relazioni e qui nasce un dubbio: parlando con un ingegnere mi ha detto che lui ha programmato un DTBS senza descrivere queste relazioni ma andando direttamente a scrivere delle query - cosa comporta descrivere o meno queste relazioni?
    Se non impieghi le relazioni non viene assicurata l'integrità referenziale, vedi i seguenti link che ne descrivono le caratteristiche in MS-Access:
    https://support.office.com/it-it/article/Guida-alle-relazioni-tra-tabelle-8a027791-b8a3-4a32-aa99-e06c4e272c45
    http://www.crescenziogallo.it/unifg/economia/Dottorato_EDATP/DB4-Relazioni.pdf

    Andrea_7 ha scritto:


    Dando un'occhiata al support della Microsoft viene detto di inserire nella terza tabella i due campi ID delle due tabelle primarie, quello che non riesco a giustificare è come mai questi due campi ID aggiunti nella terza tabella devono assumere il vincolo di chiave primaria?
    Se leggi quanto riportato dalla documentazione di MS-Access

    Microsoft ha scritto:


    ...
    Nella maggior parte dei casi tali campi corrispondenti saranno la chiave primaria di una tabella che fornisce un identificatore univoco per ogni record e una chiave esterna dell'altra tabella
    https://support.office.com/it-it/article/Guida-alle-relazioni-tra-tabelle-30446197-4fbe-457b-b992-2f6fb812b58f

    Nella tabella di collegamento, per assicurare la relazione molti a molti si impiega la coppia di chiavi esterne o FK (Foreign Key) che fanno riferimento alle due tabelle ove sono le chiavi primarie PK (Primary Key)
    https://support.office.com/it-it/article/Creare-una-relazione-molti-a-molti-eeb77a8c-8891-4965-81d6-b2a7329ce449

    E' chiaro che la coppia di chiavi FK può essere impiegata per contrassegnare in modo univoco il record (nella tabella di giunzione) ma, in Access, si può integrare anche una specifica PK (come un campo contatore che viene incrementato in automatico):
    http://www.fmsinc.com/free/NewTips/PrimaryKey.as
    http://www.databasedev.co.uk/primary_foreign_keys.htm
    http://www.databasedev.co.uk/primary_foreign_key_constraints.html
    https://support.microsoft.com/en-us/help/304466/how-to-define-relationships-between-tables-in-an-access-database
  • Re: Chiarimento di nozioni - relazioni

    Buongiorno WIlly,
    ti ringrazio per la celere risposta e per avermi fornito documentazione più dettagliata.
    Nella tabella di collegamento, per assicurare la relazione molti a molti si impiega la coppia di chiavi esterne o FK (Foreign Key) che fanno riferimento alle due tabelle ove sono le chiavi primarie PK (Primary Key)
    E' chiaro che la coppia di chiavi FK può essere impiegata per contrassegnare in modo univoco il record (nella tabella di giunzione) ma, in Access, si può integrare anche una specifica PK (come un campo contatore che viene incrementato in automatico):
    Quanto citato sopra risulta molto chiaro. Ho provato ad impostare due volte la solita tabella di collegamento:
    - Nel primo caso ho impostato come chiave primaria il solo ID della tabella di collegamento ed in più ho aggiunto gli ID delle due tabelle da collegare con relazione molti a molti;
    - Nel secondo caso ho impostato come chiave primaria tutti e tre gli ID sopra menzionati.

    A cosa incorro nel primo o nel secondo caso? E' un'impostazione errata del DTBS?

    Grazie anticipatamente.
    Saluti,
    Andrea.
  • Re: Chiarimento di nozioni - relazioni

    Andrea_7 ha scritto:


    Come prima cosa ho definito entità e campi - come passo successivo mi viene suggerito di descrivere le relazioni e qui nasce un dubbio: parlando con un ingegnere mi ha detto che lui ha programmato un DTBS senza descrivere queste relazioni ma andando direttamente a scrivere delle query - cosa comporta descrivere o meno queste relazioni? 1 a molti, molti a molti, uno a uno.
    Confermo ciò che ha già detto willy. Soprattutto in Access che ha la possibilità di avere la comoda Finestra Relazioni, conviene avere un "quadro visivo generale" di tutto il proprio progetto. Dentro la finestra Relazioni si definiscono/disegnano le relazioni. Quando crei la relazione, abbi cura di mettere sempre la spunta su "Applica integrità referenziale". Di questo "quadro generale" ne beneficiano anche le query stesse che, quando vengono impostate, mostrano automaticamente le relazioni ove già impostate, aiutando il compito del programmatore.

    Andrea_7 ha scritto:


    Dando un'occhiata al support della Microsoft viene detto di inserire nella terza tabella i due campi ID delle due tabelle primarie, quello che non riesco a giustificare è come mai questi due campi ID aggiunti nella terza tabella devono assumere il vincolo di chiave primaria?

    willy55 ha scritto:


    E' chiaro che la coppia di chiavi FK può essere impiegata per contrassegnare in modo univoco il record (nella tabella di giunzione) ma, in Access, si può integrare anche una specifica PK (come un campo contatore che viene incrementato in automatico):
    Molti manuali parlano della "non indispensabilità" di un solo campo chiave primaria nella "tabella di congiunzione". Io trovo questo discorso relativamente incompleto e/o depistante. Se la tabella di congiunzione dovesse essere anch'essa una ulteriore tabella madre per una relazione di livello più basso, risulta scomodo (o impossibile) gestirla.
    Ti dirò di più. Io trovo sempre molto comodo ordinare tutte le tabelle in base al campo IDChiavePrimaria. In questo modo hai una specie di cronologia automatica. E sai quante volte può capitare a un utente di dover inserire un nuovo dato, avere la sensazione che qualche valore somiglia o è uguale a qualche record precedentemente già inserito (mo fammi vedere cosa avevo inserito l'altro ieri a Tizio...!!!). Il campo IDChiavePrimaria di questa tabella di congiunzione garantisce tale ordinamento.

    Andrea_7 ha scritto:


    - Nel primo caso ho impostato come chiave primaria il solo ID della tabella di collegamento ed in più ho aggiunto gli ID delle due tabelle da collegare con relazione molti a molti; - Nel secondo caso ho impostato come chiave primaria tutti e tre gli ID sopra menzionati.A cosa incorro nel primo o nel secondo caso? E' un'impostazione errata del DTBS?
    Il primo caso non l'ho capito.
    Il secondo mi suona sicuramente errato.
    Ti abbiamo esaurientemente risposto prima.
  • Re: Chiarimento di nozioni - relazioni

    Grazie Osvaldo per la risposta.
    Il primo caso non l'ho capito.
    Il secondo mi suona sicuramente errato.
    Il secondo caso non è altro che quanto scritto qui: https://support.office.com/it-it/article/Video-Creare-relazioni-molti-a-molti-e65bcc53-8e1c-444a-b4fb-1c0b8c1f5653?ui=it-IT&rs=it-IT&ad=IT dove viene fatto presente di impostare come chiave primaria tutti e due gli ID delle tabelle collegate alla tab. di collegamento ed, inoltre, io ho aggiunto come chiave primaria l'ID proprio della tab. di collegamento. Risultato: ho 3 chiavi primarie nella solita tabella.
    Mentre, nel primo caso, ho impostato la solita tabella (quindi con i 3 campi con i 3 ID) soltanto che, la chiave primaria, è il solo campo ID della tabella di collegamento.

    Sto sbagliando qualcosa? O mi sono perso qualche informazione?

    Grazie, saluti.
  • Re: Chiarimento di nozioni - relazioni

    Io SCONSIGLIO di usare una chiave primaria su più campi (opinione personale che come puoi notare contrasta con la dottrina).
    Nel caso dell'esempio del link che mi hai indicato io creerei un campo IDDettaglioOrdine, numerazione automatica, chiave primaria, per quel motivo di ordinamento che ti ho detto prima.

    Per rendere UNIVOCA la coppia campi IDOrdine-IDProdotto io preferisco impostare un "Indice Multicampo Univoco": leggi la guida in linea.
  • Re: Chiarimento di nozioni - relazioni

    Perfetto, grazie mille.
    Procederò come mi hai consigliato che, anche a me, da ignorante in materia, risulta più logico.
    Quindi, correggimi se sbaglio, definite le entità (quindi le tabelle) e, successivamente, definite TUTTE le relazioni che ci sono tra queste tabelle, procedo con le query. Sono instradato correttamente?

    Grazie, buona giornata.
  • Re: Chiarimento di nozioni - relazioni

    OK.
Devi accedere o registrarti per scrivere nel forum
7 risposte