Может, не понял суть вопроса,но в чем проблема ?
Если одно сообщение -1 файл , то просто добавляете поле, где хранится ссылка на него (на файл). Если их (файлов , прикрепленных к сообщению) может быть много, то в поле хранится путь к директории из которой нужно вставить в текст чата ссылки на все имеющиеся там файлы. Название директории можно генерировать рэндомно или используя ID записи (главное чтобы оно было уникальным).
Server-Side может писаться на чем угодно. Если вы нерационально используете данные и вычислительные ресурсы - производительный фреймворк вас не спасет. Client-Side - по всякому, но сейчас в основном это чуть чуть шаблонизаторов, связанных с выбором фреймворка, на стороне сервера и самый разный JS на клиенте. Начиная от Native JS транзитом через Jquery и заканчивая Angular,Knockout и пр. Да, обновление данных без перезагрузки это Ajax. Некоторые новые браузеры умеют в сокеты, но на мой взгляд совсем широкого применения эта технология не нашла из-за отсутствия поддержки древних браузеров( да, да. IE < 10 встречается достаточно часто)