Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    145

    Query relazione molti-a-molti

    Ciao,
    non le ho mai trattate ma vorrei saperne di più...mettiamo, per esempio, di avere due tabelle, una con una lista di scrittori, l'altra con la lista di libri, ovviamente a uno o più autori corrispondono uno o più libri.
    Sarà per voi stupida la domanda ma...come si scrive la query?
    So che bisogna appoggiarsi ad una terza tabella ma....come?
    Oppure come tirare fuori autori che non hanno scritto libri??
    Grazie mille!!!

  2. #2

    Re: Query relazione molti-a-molti

    Originariamente inviato da Pepito74
    Ciao,
    non le ho mai trattate ma vorrei saperne di più...mettiamo, per esempio, di avere due tabelle, una con una lista di scrittori, l'altra con la lista di libri, ovviamente a uno o più autori corrispondono uno o più libri.
    Sarà per voi stupida la domanda ma...come si scrive la query?
    So che bisogna appoggiarsi ad una terza tabella ma....come?
    Oppure come tirare fuori autori che non hanno scritto libri??
    Grazie mille!!!
    devi appoggiarti ad una tabella di unione. Basta una tabella con tre campi:

    id_unione
    id_autore
    id_libro

    se un libro avesse piu' autori si mettono tanti record quanti sono gli autori.

    Per trovare autori che non hanno libri nel database, basta verificare se esiste almeno un record nella tabella di unione.

    es:

    select *
    from autori a
    left join unione u on a.id_autore = u.id_autore
    where u.id_autore IS NULL.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    145

    Re: Re: Query relazione molti-a-molti

    Originariamente inviato da piero.mac
    devi appoggiarti ad una tabella di unione. Basta una tabella con tre campi:

    id_unione
    id_autore
    id_libro
    ...cioè se le altre due tabelle sono:

    autori: id_autore
    libri: id_autore, id_libro

    come eseguo le query e inserisco il risultato nella tabella di unione?

  4. #4

    Re: Re: Re: Query relazione molti-a-molti

    Originariamente inviato da Pepito74
    ...cioè se le altre due tabelle sono:

    autori: id_autore
    libri: id_autore, id_libro

    come eseguo le query e inserisco il risultato nella tabella di unione?
    nel tuo caso le tabelle potrebbero anche essere due sole. Il problema potrebbe nascere se ci fossero piu' autori per lo stesso libro. Di fatto il libro "dovrebbe" essere univoco e quindi la relazione molti a molti non dovrebbe esistere mai. cioe' due libri con lo stesso codice ISBN associato a due autori diversi. Ci sarebbe da gestire un possibile "piu' autori" che sarebbe superato invece con una tabella di unione.

    Come gestire: Intanto la tabella autori non ha riferimenti esterni e quindi puo' essere gestita in modo autonomo come ti pare. La tabella libri invece e' condizionata dalla presenza di un record (gia' presente in tabella) autore.

    Si deve identificare l'autore, se manca si deve aggiungere il record, si legge l'id_autore e lo si associa a libro.id_autore. Insomma prima di scrivere una qualsivoglia query devi avere ben chiara la struttura e la relazione tra le tabelle. Poi costruirai tutte le query che ti pare.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    145
    si scusa, non lo avevo scritto ma per ogni autore possono esserci più libri, così come per ogni libro possono esserci più autori...

  6. #6
    Originariamente inviato da Pepito74
    si scusa, non lo avevo scritto ma per ogni autore possono esserci più libri, così come per ogni libro possono esserci più autori...
    se le cose stanno come dici allora ti servono le tre tabelle oppure, ma da valutare per bene, due tabelle autori/libri dove in libri metterai piu' campi autore (autore1, autore2, autore3) ma e' una cosa che non mi piace granche'.

    Avevo fatto tempo fa un database per una biblioteca comprensivo della gestione libri in prestito, ma se ben ricordo di tabelle per gestire i titoli ne avevo una sola. ISBN, titolo autore/i, casa editrice, prezzo, stato e quant'altro identificativo. Ho sempre considerato queste cose come attributi del "libro".

    Poi c'era una tabella utenti con i dati identificativi dell'utente e una tabella prestiti dove associavo l'utente al libro con le date di presa e di consegna ed altre cosette gestionali.

    Quindi penso a quanto chiedi come ad una cosa esclusivamente didattica. Forse l'ho gia' detto, ma un database va strutturato come progetto per quello che dovra' servire, con le richieste del cliente, il budget a disposizione e non tanto per scrivere tabelle/campi. Una tabella "autori" e' valida se per ogni autore hai una sua bibliografia, lavori ecc... informazioni che non avrebbe senso duplicare per ogni libro. Ma se ti limiti a nome-cognome tanto vale che lo scrivi con il libro.

    una query SELECT su tabelle multiple in relazione uno a molti tramite tabella di unione va scritta in questo modo:

    select *
    from tabella unione
    left join autori using(id_autore)
    left join libri using(id_libro)
    where ... condizione ecc.ecc.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7

    Re: Re: Query relazione molti-a-molti

    Originariamente inviato da piero.mac
    devi appoggiarti ad una tabella di unione. Basta una tabella con tre campi:

    id_unione
    id_autore
    id_libro
    Io addirittura ne terrei solo due, id_autore e id_libro, indicizzandoli entrambi e non usando una chiave primaria.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    145
    Quindi penso a quanto chiedi come ad una cosa esclusivamente didattica.
    Si, esattamente, non ho al momento alcun lavoro su cui cimentarmi ma volevo rendermi conto di come funzionasse la cosa nel qual caso me la chiedessero.....

  9. #9
    Originariamente inviato da Pepito74
    Si, esattamente, non ho al momento alcun lavoro su cui cimentarmi ma volevo rendermi conto di come funzionasse la cosa nel qual caso me la chiedessero.....
    allora prova una cosa piu' probabile:

    tabella libri.

    tabella utenti

    tabella prestiti.

    in libri tutti gli attributi del libro, compreso autore/autori. Negli utenti i dati utente. In prestiti associ libro-utente con data presa e data previsto reso e stato (reso si/no)... tanto per esempio....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    145
    si ma a me è proprio quello che manca: come faccio l'associazione libri/utenti nella terza tabella?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.