Visualizzazione dei risultati da 1 a 5 su 5

Discussione: msql unioni "multiple"

  1. #1

    msql unioni "multiple"

    Ciao a tutti!

    Premetto che sono tutt'altro che navigato nel magico mondo di PHP, database e programmazione server-side in genere... per cui mi scuso preventivamente x le eventuali cavolate...

    Il problema è questo:

    Devo strutturare il db di una casa editrice.
    Ho creato una tabella per i libri e una tabella per gli autori.
    Ovviamente le due tabelle andrebbero gestite in coppia, il che non sarebbe un problema nel caso in cui a ciascun libro corrispondesse uno ed un solo autore...
    Volevo fare in modo, però, che a ciascun libro potessero essere associati 1 o + autori, così ho fatto la seguente bella pensata:

    1)Ad ogni singolo autore corrisponde un record della tabella autori con il suo bravo ID che funge da chiave primaria.

    2)Ogni record della tabella LIBRI ha un campo ID_AUTORI contenente una stringa formata dagli ID di tutti gli autori, separati dal simbolo "#" (altra bella pensata, mi sa: forse era meglio una semplice virgola, eh?)

    A questo punto avrei le seguenti domandine da farvi:

    1) C'è un modo di gestire le due tabelle contemporaneamente e "lato mysql" (col sistema delle unioni), anziché "manualmente", "lato php", e con grande aumento della complessità nonché spreco di query e di risorse?
    Il problema è che per ciascuna operazione di inserimento, modifica o cancellazione di un record della tabella LIBRI, bisognerebbe poter operare contemporaneamente (con un'unica query) oltre che sul record in questione di LIBRI, anche su un numero variabile di record della tabella AUTORI...

    2) Questo tipo di strutturazione del db è quello solitamente utilizzato in questi casi, o ci sono altre soluzioni più comode ed efficaci?

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di iox84
    Registrato dal
    May 2004
    Messaggi
    754
    Personalmente la vedo una relazione molti a molti, cio' significa che devi utilizzare tre tabelle per snellire il tutto:
    -tabella dei libri
    -tabella autori
    -tabella di relazione libri/autori

    nella tabella di relazione vanno inseriti l'id del libro e quello dell'auotore, cosi' per ogni libro corrispondono piu' autori e un autore puo' aver scritto uno o piu' libri, questa mi sembra la soluzione piu' corretta, cosi' puoi giocartela con le join quando devi estrarre i dati
    La fortuna e' cieca ma la sfiga ci vede benissimo
    Comprarselo o farselo di legno

  3. #3
    Grazie!
    Ma la questione di fondo, che rimane anche se aggiungo una terza tabella di relazione, è questa: è meglio creare (nella tabella LIBRI, o nella tabella di relazione) un unico campo ID_AUTORI contenente tutti gli ID degli autori associati (divisi da un separatore), o piuttosto un certo numero fisso di campi ID_AUTORE , ognuno dei quali destinato a contenere l'ID di uno degli autori?
    Il problema di quest'ultima soluzione è che, se scelgo un numero troppo basso di campi id_autore, rischio di trovarmi scoperto nel momento in cui capitasse di dover inserire un libro che abbia un numero di autori maggiore del numero di campi disponibili; se al contrario scelgo un numero troppo alto, di sprecare spazio inutilmente.
    Che ne pensate?

  4. #4
    Utente di HTML.it L'avatar di iox84
    Registrato dal
    May 2004
    Messaggi
    754
    La mia idea e' di utilizzare la tabella per relazionare gli autori ai libri Es:
    codice:
    |autori|               |libri|
    |id_autore|nome  |     |id_libro|nome  |
    | 0       |tizio |     | 0      |libro1|
    | 1       |caio  |     | 1      |libro2|
                           | 2      |libro3|
    
    |relazioni|
    |id_autore|id_libro|
    |    0    |    0   |
    |    0    |    1   |
    |    1    |    0   |
    |    1    |    2   |
    Utilizzando questa struttura nell'esempio risulta che:

    -Il libro libro1(id_libro=0) e' stato scritto da tizio e caio
    -Il libro libro2(id_libro=1) e' stato scritto solo da tizio
    -Il libro libro3(id_libro=2) e' stato scritto solo da caio

    Capito cosa voglio dire? cosi' eviti di mettere piu' id_autore o utilizzare separatori (che complicherebbero le cose) e puoi fare tutte le relazioni che vuoi
    La fortuna e' cieca ma la sfiga ci vede benissimo
    Comprarselo o farselo di legno

  5. #5
    Ok. Ma poi come faccio a estrarre, con un unica query , il record relativo al libro dalla tab. LIBRI e tutti quelli relativi agli autori dalla tab. AUTORI? Si può?
    In effetti mi chiedevo se è possibile o meno fare delle unioni "multiple" (nel senso di estrarre con un'unica query un record da una tabella ed un numero variabile di record, ad esso collegati, da un'altra 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.