I'm working on the usual comments table in postgres that has a one-to-many relationship with a commentable entity. In other words, one comment belongs to a post, and a post can have many comments.
The problem is that I have multiple commentable entities. My initial thought was to create a table for each entity, like posts_comments
, and profile_comments
, but that just feels wrong as all the comments are structurally similar. If I decide to allow commenting on say, user-posted pictures, then I would need to add another picture_comments
table with identical columns. And then if I decide to add or remove any column, I would have to modify all the tables for consistency.
So I'm considering whether I should instead have a single comments table and then maintain referential integrity through intermediary join tables with a unique index on the comment_id
foreign key to ensure the one-to-many relationship. Are there any performance or size-related downsides from doing this?
What is the best way to handle this in postgres or SQL in general? I looked around for solutions or clues on stackoverflow and dba exchange but did not find a satisfying answer. If someone can provide an answer or opinion or a link to an already answered question, I would really appreciate it.