Visualizzazione dei risultati da 1 a 4 su 4

Discussione: tabelle ricorsive

  1. #1

    tabelle ricorsive

    allora ragazzi sto facendo un applicazione php di una chat. finchè era una chat globale con tutti gli utenti che potevano inserire messaggi era semplice, avevo la tabella utenti( idUtente(pk), ...) e la tabella messaggio(idMessaggio(pk)... id_utente(fk)) e funziona tutto facilmente. ma ora con una chat privata avrei un utente che deve inviare un messaggio a un altro utente, quindi ho pensato che fosse una tabella ricorsiva visto che un utente può essere il destinatario o il mittente.
    Però non so bene come realizzarla con i messaggi, io avevo fatto una cosa del genere, la mia tabella utenti rimane invariata, come anche quella messaggio e creo la tabella msgPrivato( idMit(fk), idDest(fk), msg, data ... non so se serve una pk) ecco quello che avrei fatto( ho visto su un libro di base di dati), ma questa tabella diciamo contiene l'id del mittente che è presente nella tabella utenti, come anche per idDest, e avrei quindi più righe idMit IdDest con gli stessi id di due utenti, esempio idMit = 1 incia messaggio a idDest = 2 e tutte queste righe avranno un msg.
    E' la cosa giusta da fare? a mio avviso la trovo ridondante e non normalizzata, sul mio libro non c'è un esempio chiarificativo di questo genere...

  2. #2
    non confondere le primary keys (PK) con le foreign keys (FK)

    il messaggio privato avrà una PK e due FK: più che lecito

  3. #3
    Non usare due tabelle separate per i messaggi. Usa una tabella messaggio e basta. Aggiungi una colonna destinatario, che contiene l'id del destinatario, oppure NULL se il messaggio è pubblico.

    Puoi avere due FK se pensi che sia necessario: una in messaggio.destinatario e una in messaggio.mittente. Controlla però che il DBMS che usi ammetta valori NULL nella chiave esterna, non sono sicuro che tutti lo consentano.
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  4. #4
    se non puoi lasciarla NULL, inventati un utente "pubblico" e aggancia all'utente pubblico tutti i messaggi pubblici

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.