Question: I am designing a database for an application where a user can comment on pictures & videos.   

Should I keep separate tables for comments like (Picture\_comments & videos\_comments) 

OR   
should I keep single table for comment and other mapping tables like (picture\_comment\_mapping & video\_comment\_mapping).  

Which one will be better approach and why?  

**Detail**   

Approach 1:

```
user
     id
     name

Picture
     id
     link
video
     id
     link

comment_video
     id
     user_id
     video_id
     comment
comment_picture
     id
     user_id
     picture_id
     comment

```

Approach 2:

```
user
     id
     name

picture
     id
     link
video
     id
     link

comment
     id
     user_id
     comment

comment_picture_mapping
     id
     comment_id
     picture_id
comment_video_mapping
     id
     comment_id
     video_id

```

Which one is better approach and why?

Answer: 
I would use your approach number 2 because its much easier to then do things like "Search all comments"
You can have just one table comments where one field will specific the type of the comment. This is basically Option 2 with no mapping , a single field is enough to know what type of comment it is. As for the video or picture ID you can consider them as generic objects and the consumer can decide what to do with them based on the type or comment or object mime type. This should allow you to add more types of comments in the future.

```
Comment
 id
 user_id
 comment_text
 comment_type
 linked_object_id

CommentObect
  id
  type
  object

```