I have a system that works well set in place. It basically has the set up like this:
notification_id
user_id
module
action_type
added_by
read
read_date
added
This is a simple way of doing it. user_id is who it's for, added_by is the user id of whomever performed the action. Module is where it was performed at, and action_type is what happened (comment, deletion, added, etc). Read is if it's already been viewed, and read_date is when it was viewed.
I then have a class that builds the verbiage based on what the values above are.
I have then set up a crontab that will clean up old notifications in the database after so many days.