Relazioni database: usarle o non usarle?

di il
23 risposte

Relazioni database: usarle o non usarle?

Sto riprendendo dopo qualche anno di pausa a cimentarmi nell'utilizzo di Access, iniziando a rivedere testi che avevo acquistato precedentemente.
A memoria ricordavo che le relazioni tra le varie tabelle del database fossero indispensabili per relazionare i dati da esso estrapolati. Ma la rilettura di un libro per principianti - quale io sono rimasto - mi mette seri dubbi su questa mia convinzione. In effetti il libro mostra un database dove le relazioni vengono utilizzate solo per creare query e mai per vincolare l'immissione dei dati nelle tabelle, e sembra funzionare benissimo. Inoltre l'autore pur spiegando come costruire relazioni tra tabelle ne sconsiglia l'uso consigliando al tempo stesso l'utilizzo di Visual Basic (che ancora non conosco) per ottenere lo stesso scopo, perché secondo lui questa seconda soluzione creerebbe meno ostacoli agli utenti durante l'immissione dei dati. Infine non ho capito bene in che modo tali relazioni andrebbero a vincolare i dati immessi?

23 Risposte

  • Re: Relazioni database: usarle o non usarle?

    Hm.....

    Curiosità, come si chiama l'autore ed il libro che sconsiglia l'uso di relazioni?

    Se in un database hai solo una tabella certo che puoi non utilizzare le relazioni, ma se hai due tabelle come fai a concatenare i dati e sopratutto come fai a fare le query?

    Esercizio semplicissimo.
    Fai due tabelle, una con i cognomi ed un'altra con i nomi.
    Metti i cognomi della tua famiglia ed i nomi sempre della tua famiglia.

    Poi cerca di creare una query che ti estrapoli il cognome ed il nome unito in modo corretto, senza usare le relazioni.
  • Re: Relazioni database: usarle o non usarle?

    Scusa forse mi sono espresso male. Lui sconsiglia le relazioni tra le tabelle del database, per intenderci quelle che si creano con gli strumenti del database, non quelle per fare le query che per forza devono esserci.
  • Re: Relazioni database: usarle o non usarle?

    Il discorso è decisamente molto più articolato di quanto si pensa, e sarebbe riduttivo dire che le relazioni sono Obbligatorie e vantaggiose... perchè non è esattamente così, ma per affrontare un discorso di questo tipo senza essere fraintesi è complicato, richiede la conoscenza di come lavora un DBRelazionale per capire che le Relazioni(quelle che intendiamo disegnate come righette con le frecce in realtà sono dei Trigger evoluti...)
    In sostanza non è affatto "obbligatorio" usarle, ma mettono a disposizione delle azioni automatiche comode, e possono facilitare il controllo dell'Integrità referenziale dei dati...
    Il lavoro che fanno le relazioni deve essere fatto da qualcuno, se non si vuole sfruttare la relazione si deve implementare una gestione di controllo di coerenza con il codice... perchè che si voglia o no, il Database è di tipo RELAZIONALE e per lavorare ha bisogno della Coerenza dei dati.
    L'esempio più semplice è proprio nelle Query con i JOIN, che sfrutta non tanto le relazioni ma quanto il fatto che i dati siano coerenti al punto da supportare i JOIN.

    Ora senza banalizzare nulla, un RDBMS è basato su relazioni, ma vi ricordo che con l'avvento delle tecnologie Mobile l'utilizzo di Database NON RELAZIONALI è molto diffusa, e si basa su aggregazioni di Oggetti che contengono i dati... non più di Tabelle in cui i dati sono frazionati.
    Ci sono pro e contro in queste 2 tecnologie... ma è un'altra questione...
  • Re: Relazioni database: usarle o non usarle?

    Mi sembra di capire che le relazioni (Trigger evoluti) entrano in gioco soprattutto durante la modifica dei dati.
    In pratica supponendo di avere una tabella che contiene i titoli di libri ed un'altra che contiene gli editori, se io cancello un editore devo assicurarmi di rimuovere anche tutti i libri (cioè i titoli) che fanno capo a quell'editore, altrimenti avrei dei riferimenti non più validi. Tuttavia in un database di discrete dimensioni queste linee di collegamento iniziano a diventare tante, a svolgere un lavoro in background complesso fino a diventare poco controllabile.
    Supponendo infatti di sbagliare qualcosa nell'impostare queste relazioni potrebbe succedere che cancellando un solo titolo mi venga cancellato anche l'editore al quale però sono associati anche altri titoli che resterebbero senza collegamento all'editore e quindi il problema di mancanza d'integrità si scatenerebbe ancora. Forse per questo l'autore del testo da me menzionato predilige controllare tutto attraverso codice.
  • Re: Relazioni database: usarle o non usarle?

    Tecnicamente sono UPDATE-CASCADE e DELETE-CASCADE, io disabilito sempre il DELETE che trovo pericoloso... preferendo una gestione via codice... ma l'Update lo lascio abilitato...

    Come ti dicevo è troppo facile banalizzare i concetti...
  • Re: Relazioni database: usarle o non usarle?

    mypipe ha scritto:


    hm.....

    Curiosità, come si chiama l'autore ed il libro che sconsiglia l'uso di relazioni?

    Se in un database hai solo una tabella certo che puoi non utilizzare le relazioni, ma se hai due tabelle come fai a concatenare i dati e sopratutto come fai a fare le query?

    Esercizio semplicissimo.
    Fai due tabelle, una con i cognomi ed un'altra con i nomi.
    Metti i cognomi della tua famiglia ed i nomi sempre della tua famiglia.

    Poi cerca di creare una query che ti estrapoli il cognome ed il nome unito in modo corretto, senza usare le relazioni.
    Mi pare che questo esempio non sia calzante...
    Prova a fare tu queste 2 Tabelle così come le hai descritte e prova a Relazionarle...!
    Se non definisci le Chiavi Esterne direi che è banale il discorso... in quanto non potrai relazionare nulla... ma se definisci le Chiavi esterne e le rispetti... non hai l'obbligo di relazionare le tabelle e le Query(JOIN) funzionanno benissimo.

    Prova a fare tutto per bene e poi CANCELLA LE RELAZIONI ne sarai sorpreso...!

    Saluti.
  • Re: Relazioni database: usarle o non usarle?

    Concordo con Alex.

    Non c'è una risposta universale a questa domanda, ma (come quasi sempre accade) la risposta è:

    in certi casi possono essere utili, in altri casi possono essere assolutamente deleterie.

    Dato che per professione io ho sempre lavorato per lunghi anni come freelance presso molte aziende, ho avuto a che fare con diversi database quali:
    Access, DBF (dBase III Plus, FoxPro, Clipper), FireBirdSQL, MySQL, DB2, Oracle, SQL Server, ...)
    e vi posso assicurare che più è grosso il database (parliamo anche di oltre 6.000 tabelle) meno esistono relazioni.

    Quindi confermo che generalizzare è troppo banale.

    Personalmente non le uso, mai.
  • Re: Relazioni database: usarle o non usarle?

    Io trovo le relazioni molto utili. Vedere la finestra Relazioni di Access senza le tabelle e i join, non mi rende l'idea generale di tutto il progetto che c'è sotto.
    Giancarlo ha dichiarato di essere un principiante e di non conoscere il VBA. Io gliele consiglierei vivamente.
  • Re: Relazioni database: usarle o non usarle?

    OsvaldoLaviosa ha scritto:


    Giancarlo ha dichiarato di essere un principiante e di non conoscere il VBA. Io gliele consiglierei vivamente.
    Questo che vuol dire? Anche tu sei principiante, quindi le consigli per questo?

    Come già ampiamente osservato, le relazioni si devono usare sapendo cosa si sta facendo e non dipende dal fatto di essere principiante o meno.
  • Re: Relazioni database: usarle o non usarle?

    @Alex ha scritto:


    mypipe ha scritto:


    hm.....

    Curiosità, come si chiama l'autore ed il libro che sconsiglia l'uso di relazioni?

    Se in un database hai solo una tabella certo che puoi non utilizzare le relazioni, ma se hai due tabelle come fai a concatenare i dati e sopratutto come fai a fare le query?

    Esercizio semplicissimo.
    Fai due tabelle, una con i cognomi ed un'altra con i nomi.
    Metti i cognomi della tua famiglia ed i nomi sempre della tua famiglia.

    Poi cerca di creare una query che ti estrapoli il cognome ed il nome unito in modo corretto, senza usare le relazioni.
    Mi pare che questo esempio non sia calzante...
    Prova a fare tu queste 2 Tabelle così come le hai descritte e prova a Relazionarle...!
    Se non definisci le Chiavi Esterne direi che è banale il discorso... in quanto non potrai relazionare nulla... ma se definisci le Chiavi esterne e le rispetti... non hai l'obbligo di relazionare le tabelle e le Query(JOIN) funzionanno benissimo.

    Prova a fare tutto per bene e poi CANCELLA LE RELAZIONI ne sarai sorpreso...!

    Saluti.
    Concordo su tutti gli interventi fatti e sul fatto che non si può generalizzare il discorso e che il tutto va valutato di volta in volta ed in base anche alle capacità e le conoscenze di colui che sta sviluppando.

    Per quanto riguarda il mio discorso, il fatto di mettere delle chiavi esterne era implicito, altrimenti, giustamente come dici, non si riuscirebbe a relazionare un bel niente.

    Il fatto è che per me relazionare le tabelle è sinonimo di chiave esterna e del rispetto delle stesse e quindi quando parlo di relazioni non mi riferisco al semplice trigger visuale delle linee e sopratutto quando parlo di relazioni per me significa avere lo strumento per rispettare l'integrità referenziale, senza dover scrivere codice che lo faccia. Cosa che ad un certo punto potrebbe diventare scomoda e pericolosa per gli inevitabili errori che si potrebbero commettere in fase di stesura del codice o di approccio logico alla modifica e gestione dei dati.

    Penso che sopratutto per uno sviluppatore di basso/medio livello, l'uso delle relazioni nel termine classico del termine (non come le intendo io) sia indispendabile per non sbagliare e sopratutto per capire a fondo come usare le chiavi esterne e come creare un database scevro da errori.

    Poi è normale che più si va avanti con le competenze e le conoscenze e più si affinano le tecniche di sviluppo e di programmazione e quindi si passi a livelli superiori tanto da poter usare sistemi più sofisticati, ma sicuramente più complicati da gestire.

    Per un neofita trovo poco conveniente non usare le relazioni. Poi è normale che le chiavi vadano rispettate, con o senza le relazioni.

    Questo naturalmente è un mio pensiero personale.
  • Re: Relazioni database: usarle o non usarle?

    Mi permetto l'esposizione della mia visione per il semplice fatto che a mio parere questo è un Forum Tecnico, nel quale le considerazioni personali sono positive ma sarebbe prioritario dare OGGETTIVITA' al discorso con strumenti tecnici a supporto, cercando di rendere l'utente autonomo nella fase di scelta e fornendo lui, ed a chi legge, un insieme di strumenti per l'interpretazione evoluta...

    Se fosse solo che un Utente fa la domanda e gli si dice "FAI COSI'"... beh, a mio avviso credo possa mancare un pezzo... se io facessi domande e mi sentissi rispondere così, cercherei altre risposte... e sono convinto lo faresti anche tu.
  • Re: Relazioni database: usarle o non usarle?

    @Alex ha scritto:


    Il discorso è decisamente molto più articolato di quanto si pensa, e sarebbe riduttivo dire che le relazioni sono Obbligatorie e vantaggiose... perchè non è esattamente così, ma per affrontare un discorso di questo tipo senza essere fraintesi è complicato, richiede la conoscenza di come lavora un DBRelazionale per capire che le Relazioni(quelle che intendiamo disegnate come righette con le frecce in realtà sono dei Trigger evoluti...)
    In sostanza non è affatto "obbligatorio" usarle, ma mettono a disposizione delle azioni automatiche comode, e possono facilitare il controllo dell'Integrità referenziale dei dati...
    Il lavoro che fanno le relazioni deve essere fatto da qualcuno, se non si vuole sfruttare la relazione si deve implementare una gestione di controllo di coerenza con il codice... perchè che si voglia o no, il Database è di tipo RELAZIONALE e per lavorare ha bisogno della Coerenza dei dati.
    L'esempio più semplice è proprio nelle Query con i JOIN, che sfrutta non tanto le relazioni ma quanto il fatto che i dati siano coerenti al punto da supportare i JOIN.

    Ora senza banalizzare nulla, un RDBMS è basato su relazioni, ma vi ricordo che con l'avvento delle tecnologie Mobile l'utilizzo di Database NON RELAZIONALI è molto diffusa, e si basa su aggregazioni di Oggetti che contengono i dati... non più di Tabelle in cui i dati sono frazionati.
    Ci sono pro e contro in queste 2 tecnologie... ma è un'altra questione...
    Per me questa risposta è stata onesta/tecnica/completa e ci sta bene che @Alex abbia dato il suo contributo. Personalmente non avrei nulla da obiettare al riguardo. Io dico solo: "chi se la sente di consigliare (col cuore in mano) a un principiante di non usare le relazioni?"
    Anche a me sorge la

    mypipe ha scritto:


    Curiosità, come si chiama l'autore ed il libro che sconsiglia l'uso di relazioni?
    Se giancarlo ha letto

    giancarlo75 ha scritto:


    Inoltre l'autore pur spiegando come costruire relazioni tra tabelle ne sconsiglia l'uso consigliando al tempo stesso l'utilizzo di Visual Basic
    io nutro seri dubbi che si trattasse di un "manuale di base". Non ho letto tutti i manuali di base, ma penso che generalmente non trattano macro e VBA.
    Io trovo interessante approfondire anche questo mistero.

    Poi alla fine, mi pare di capire che siamo tutti d'accordo , quello che conta è il CONTESTO concreto sul quale si sta lavorando.
  • Re: Relazioni database: usarle o non usarle?

    A mio avviso, il problema di fondo è che si sta discutendo di argomenti tecnici cercando di spiegare qualcosa di avanzato a qualcuno che tecnico non è!

    Per essere davvero in grado di capire la differenza di quando si debba usare le Relazioni e quando no, occorre avere una profonda conoscenza ed esperienza sulla gestione dei database, ovviamente, ma anche di ciò che è importante per un azienda, delle reali necessità.

    Senza queste premesse, allora ogni suggerimento è frutto esclusivamente dei propri convincimenti che derivano dalla poca o nulla esperienza nel 'mondo reale', inteso come quello che accade realmente, in pratica, nelle aziende.

    Le teorie sono belle come linee guida, utili quando sono applicabili, ma oltre questo c'è... un mare di scenari, situazioni, logiche di business, ecc. che si scontrano con tali teorie.
    Come recita un proverbio: Tra il dire e il fare, c'è di mezzo il mare.
  • Re: Relazioni database: usarle o non usarle?

    Grazie a tutti per i numerosi interventi e scusate il ritardo nella mia risposta ma ero al lavoro. No, non faccio il programmatore ed è pur vero che sono nel vostro campo un principiante o meglio un semplice appassionato. Leggerò con più calma le risposte, ma nel frattempo cito libro ed autore. Il libro è Access partendo da zero, edito da edizionifutura. L'autore è Gabriele Grandinetti e la pagina dove si esprime in favore di Visual Basic ed a sfavore delle relazioni create con gli strumenti di Access é la 176.
Devi accedere o registrarti per scrivere nel forum
23 risposte