Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    MySQL più valori in un campo

    Chiedo a livello di logica cosa è più sensato e perche...

    Ci spiego io ho un DB dove devo creare una tabella autori e la tabella edizione. OK faccio il collegamento e sono apposto. Andando avanti con il lavoro ho constatato che a volte gli autori devo essere più di uno per una edizione (e questo capita anche in altri campi) quindi per ovviare al problema ho costruito una tabella di collegamento dove vengono inseriti quindi l'ID dell'edizione e l'ID degli autori (quindi per una edizione con 3 autori differenti avrò 3 campi con lo stesso id edizione ma 3 id autori differenti)... Parlandone con un collaboratore mi è stato fatto notare che si potevano inserire i 3 autori dentro il campo iniziale senza stare a creare una nuova tabella basta che ci sia un qualche cosa che faccia da separatore (spazio virgola slash...) e poi siccome viene gestito con PHP quando li si richiama con la funzione explode diviso in array. Ora l'univa cosa sconveniente che sono riuscito a trovare è che se un autore avesse un simbolo usato per divisore per nome potrebbe forse in qualche modo interferire... Ma altrimenti non ne ho trovati. L'unica cosa è che mi pare strano poter gestire più dati in un unico campo. In questo modo si avrebbe l'opportunità di usare meno select e quindi ridurre il carico sul server.

    Non ho considerato qualche cosa oppure è una pratica usata?

  2. #2
    Quote Originariamente inviata da alemix Visualizza il messaggio
    Chiedo a livello di logica cosa è più sensato e perche...

    Ci spiego io ho un DB dove devo creare una tabella autori e la tabella edizione. OK faccio il collegamento e sono apposto. Andando avanti con il lavoro ho constatato che a volte gli autori devo essere più di uno per una edizione (e questo capita anche in altri campi) quindi per ovviare al problema ho costruito una tabella di collegamento dove vengono inseriti quindi l'ID dell'edizione e l'ID degli autori (quindi per una edizione con 3 autori differenti avrò 3 campi con lo stesso id edizione ma 3 id autori differenti)... Parlandone con un collaboratore mi è stato fatto notare che si potevano inserire i 3 autori dentro il campo iniziale senza stare a creare una nuova tabella basta che ci sia un qualche cosa che faccia da separatore (spazio virgola slash...) e poi siccome viene gestito con PHP quando li si richiama con la funzione explode diviso in array. Ora l'univa cosa sconveniente che sono riuscito a trovare è che se un autore avesse un simbolo usato per divisore per nome potrebbe forse in qualche modo interferire... Ma altrimenti non ne ho trovati. L'unica cosa è che mi pare strano poter gestire più dati in un unico campo. In questo modo si avrebbe l'opportunità di usare meno select e quindi ridurre il carico sul server.

    Non ho considerato qualche cosa oppure è una pratica usata?
    ciao,
    la tua soluzione e' decisamente quella corretta.

    Stai lavorando con i database relazionali ed hai creato una relazione tra entita', naturale conseguenza nell'uso dei database.

    La soluzione del tuo amico puo andar bene a livello di gioco ma, se vuoi fare le cose serie crea la relazione
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Ok... Perfetto la questione ora è questa... In cosa è meglio?

    Perché devo dargli una motivazione, se no sembra che non lo voglia fare perche non sia un'idea pattuita da me.

  4. #4
    Immagino tu stia creando un db per poterlo sfruttare anche in fase di ricerca di informazioni.

    Se dovessi rispondere a domande del tipo:
    - l'autore presente nel maggior numero di edizioni;
    - l'autore che ha partcipato all'edizione X e Y

    eccetera...

    con l'array lo puoi fare ma stai reinventando la ruota in quanto tutto ti viene gratuito con dei Join tra entita' e relazioni
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Allora ti chiedo un'altra cosa per togliermi un dubbio, non sono un esperto di Join, o almeno io non uso il comando JOIN ma il comando WHERE.

    Esempio devo cercare gli autori di una edizione

    Tabella edizione

    ID | Titolo| Prezzo

    Tabella autori

    ID | Nome | Cognome

    Tabella collegamento

    ID | IDedizione | IDautore

    ora se io devo stampare i dati di solito faccio

    SELECT * FROM edizione ORDER BY titolo

    poi ricerco i collegamenti faccio un fetch_array per stampare i dati

    SELECT * FROM collegamento WHERE IDedizione=$edizione["ID"]

    e a questo punto stampo i dati dell'autore

    SELECT * FROM autore WHERE ID=$collegamento["IDstoria"]

    Immagino che in questo caso qua i due esempi siano completamente uguali, diciamo che il mio errore e non usare le Join no?

  6. #6
    Quote Originariamente inviata da alemix Visualizza il messaggio
    Allora ti chiedo un'altra cosa per togliermi un dubbio, non sono un esperto di Join, o almeno io non uso il comando JOIN ma il comando WHERE.

    Esempio devo cercare gli autori di una edizione

    Tabella edizione

    ID | Titolo| Prezzo

    Tabella autori

    ID | Nome | Cognome

    Tabella collegamento

    ID | IDedizione | IDautore

    ora se io devo stampare i dati di solito faccio

    SELECT * FROM edizione ORDER BY titolo

    poi ricerco i collegamenti faccio un fetch_array per stampare i dati

    SELECT * FROM collegamento WHERE IDedizione=$edizione["ID"]

    e a questo punto stampo i dati dell'autore

    SELECT * FROM autore WHERE ID=$collegamento["IDstoria"]

    Immagino che in questo caso qua i due esempi siano completamente uguali, diciamo che il mio errore e non usare le Join no?
    Si mettendo le tabelle in join (anche eventualmente implicito quindi nel where)
    Le 3 query le unisci in una sola
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

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.