Как правильно хранить комментарии, топики, посты?
В поле content имя файла, который содержит в себе контент поста, комментария или топика. В зависимости от нужного будет подставляться путь.
Я в детстве так котлеты ел - брал рукой, насаживал на вилку, и потом с вилки ел. 
Скажи, кто тот нехороший дядя, который тебя научил так данные в базе хранить?
Правильнее наверное всё-таки вот так:topics (int id, string title);
posts (int id, text content, int topic_id);
comments (int id, text content, int post_id);