Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114

    Più informazioni in un solo campo

    Vorrei chiedervi qual'è il metodo migliore per creare un database che ha messaggi inviati a più utenti:

    ID_MESSAGGIO | ID_UTENTE_INVIATO
    1 | 4,6,20,30
    2 | 2,7,6,30,31,33

    Come vedete (spero) un singolo messaggio dovrebbe essere inviato e poi registrato a diversi utenti; di nota che io utilizzerei una virgola per diversificare gli ID nella stessa tabella per poi ottenerli singolarmente lavorando sulla stringa!

    E' il metodo migliore o ne conoscete altri?
    Grazie infinite!

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da Igreo Visualizza il messaggio
    ...... E' il metodo migliore o ne conoscete altri?
    Il metodo è quello, ma pero la stringa non la devi costruire te a mano ......
    si tratta di una relazione molti a molti
    - tabella messaggi
    - tabella utenti
    - la tabella necessaria alla relazione con i soli IdMessaggio e IdUtente

    poi un ciclo in applicazione fa il resto

  3. #3
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Il metodo migliore è sicuramente quello di NON utilizzare una stringa composta con gli ID
    Immagina di dover cercare (ad esempio) gli utenti a cui è stato mandato sia il messaggio 1 che il 2 (nel tuo esempio sarebbero l'utente 6 ed il 30)....diventa un lavoro ingestibile (pensa se i destinatari o i messaggi sono centinaia e non solo 2...)

    Va bene utilizzare una tabella con gli ID dei messaggi e gli ID degli utenti (come suggerisce anche nman) ma ogni record avrà solo una informazione. Riprendendo il tuo esempio avrai.. (potrai aggiungere se vuoi una ulteriore colonna ID autoincrementante da usare come chiave primaria)

    ID_Messaggio | ID_Utente
    1 | 4
    1 | 6
    1 | 20
    1 | 30
    2 | 2
    2 | 7
    ...

  4. #4
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114
    Quote Originariamente inviata da comas17 Visualizza il messaggio
    Il metodo migliore è sicuramente quello di NON utilizzare una stringa composta con gli ID
    Immagina di dover cercare (ad esempio) gli utenti a cui è stato mandato sia il messaggio 1 che il 2 (nel tuo esempio sarebbero l'utente 6 ed il 30)....diventa un lavoro ingestibile (pensa se i destinatari o i messaggi sono centinaia e non solo 2...)

    Va bene utilizzare una tabella con gli ID dei messaggi e gli ID degli utenti (come suggerisce anche nman) ma ogni record avrà solo una informazione. Riprendendo il tuo esempio avrai.. (potrai aggiungere se vuoi una ulteriore colonna ID autoincrementante da usare come chiave primaria)

    ID_Messaggio | ID_Utente
    1 | 4
    1 | 6
    1 | 20
    1 | 30
    2 | 2
    2 | 7
    ...

    Ricevuto, grazie infinite!

  5. #5
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114
    ID_Messaggio | ID_Utente
    1 | 1
    1 | 2
    1 | 3
    1 | ...
    1 | 1000

    Però scusate non diventa interminabile se ad esempio invio un messaggio a tutti gli utenti... mettendo il caso che ne siano 1000?
    Non sarebbe troppo? Forse in questo caso (cioè quando bisogna riferirlo troppe volte) sarebbe il caso di tornare come avevo suggerito io, cioè dividendo gli ID con una virgola e poi recuperli come stringa?!

    Grazie ancora.

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da Igreo Visualizza il messaggio
    Forse in questo caso (cioè quando bisogna riferirlo troppe volte) sarebbe il caso di tornare come avevo suggerito io, cioè dividendo gli ID con una virgola e poi recuperli come stringa?!
    Le 2 alternative sono:
    avere 1000 record cosi
    1 | 1
    1 | 2
    1 | 3
    1 | ...
    1 | 1000

    oppure avere 1 solo record cosi
    1 | 1, 2, 3, ....., 1000

    se ragioniamo a livello di DB a parer mio è decisamente migliore la prima,
    sembrera interminabile ma è minimamente quello che ti occorre

    del resto anche la seconda non è meno interminabile , ci sono scritte le stesse cose

    pensa poi a in quale campo memorizzeresti una stringa di 1000 numeri più 1000 virgole

    pensa alle query che dovresti fare per capire che
    all 'UtenteId 2587 hai mandato il MessaggioId 8659

    Comunque sarebbe una soluzione NON normalizzata




    se invece ragioni a livello di spedizione di messaggi e di creare un rapporto
    allora puoi fare un ciclo e costruirti di volta in volta la tua stringa
    (che pero non la devi memorizzare in 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.