Per prima cosa manca l'id numerico agli utenti
Non usare lo username, perchè come campo testuale sarà più lento ed inoltre non è collegato alle altre tabelle
Quindi la tabella utenti la cambierei così
Codice PHP:
TABLE `utenti` (
`
idutenteint(11NOT NULL auto_increment,
`
usernamevarchar(10NOT NULL,
`
passwordvarchar(64NOT NULL,
`
authadminchar(1), // per capire se utente ha diritti di amministrazione
PRIMARY KEY  (`idutente`)
); 
La tabella assistenza invece la lascerei come l'hai fatta
Codice PHP:
TABLE `assitenza` (
`
idassitenzaint(11NOT NULL auto_increment,
`
idutenti int(11),
`
contattovarchar(50),
`
emailvarchar(25),
`
titolovarchar(50),
`
descrizioneproblematext,
`
statuschar(1), // devo capire se l’assistenza è "aperta" o "chiusa"
`datadate,
PRIMARY KEY  (`idassitenza`)
); 
Mentre "unirei" le tabelle "risposte" e "repliche" in una unica tabella con un semplice identificatore che indica se si tratta di una "comunicazione" che viene dall'utente o di una risposta dell'assistenza, con un id che ne identifica l'ordine
Codice PHP:
TABLE `repliche` (
`
idreplicaint(11NOT NULL auto_increment,
`
idassitenzaint(11),
`
flagutenteset('0','1'),
`
risptext,
PRIMARY KEY  (`idrisposta `)
); 
In questo modo le "repliche" dell'assistenza avranno "flagutente" = '0' mentre le repliche dell'utente avranno 'flagutente' = '1' e ordinandole per "idreplica" avrai la discussione "utente vs assistenza" in un'unica sequenza