In a question/answer forum component I am writing as part of a site, I have two tables that theoretically look like this(that is, I want said data kept for each entity):
THREAD POST
thread_id post_id
type_id (question) writer_id
writer_id thread_id
title parent_id
body (optional) post_body
followers date
merge_id upvotes
date dnvotes
upvotes replies
dnvotes views
replies post_type_id (e.g. answer, comment to an answer etc.)
views
anonymous
The only real differences between these entities are merge_id (if a question is merged into another one, this id will reference said question_id), followers, and title. Combining them into one seems a bit cumbersome and bloated to me, and seems to be starting off a bit denormalized I think. And, if they're one, both body and title would have to be be nullable which they shouldn't (I know there can be safeguards in the code).
I also thought of having thread consist of only the attributes not in post which would look like:
THREAD
thread_id (or post_id which would be primary and foreign key refing POST)
title
merge_id
followers
but that doesn't feel quite right either.
Also, if it makes any difference, I plan to have the questions displayed along with the highest ranking answer quite often, in the style of quora.
Any design advice would be much appreciated.
(also, I am keeping them someone generic (thread/post) so that if needed I can use these tables for a blog or whatever else later on.)
It looks to me like these should be two separate tables.
To help you with the decision, find out how you are going to use them.
If you treat them the same in your SQL queries, and you usually don't care if something is a post or a thread, using a single table would make sense. If you treat them differently (which I'd expect), use two tables.