Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am planning on building a system where users "subscribe" to "records".

Records are updated on a schedule, several times a day.

When records are updated, the user should be notified that these records have been added/updated.

I don't want each user to have their own copy of the records due to storage space and the overhead of inserting many records, one for each subscriber, each time the schedule runs.

However, each user will need to add metadata against each record they are subscribed to. Such as notes and flags that the record has been read etc.

Can anyone give me any advice or how to structure such a system or where I can learn more about this sort of application architecture?

Is this the correct place to ask?

At the moment, I'm not even sure what to Google for ;)

share|improve this question
up vote 1 down vote accepted

In the past, I've accomplished this with Event tables.

Events                   EventTypes           Records                 Users

UserID  ------------------------------------------------------------  UserID
RecordID  ----------------------------------  RecordID                Name
EventTypeID  ----------  EventTypeID          Description             Title
DateTime                 Name                 DateTime                Phone
Notes                    Description          LinkToDocument

Each event record is a reckoning of something that a user did to a document, what that action was (the Event Type: Add, change, delete, print, etc.), which document the action was performed on, what date and time the action occurred, and any notes associated with the action.

share|improve this answer
Thanks, that makes sense. I suppose the problem is that in order to get a list of records and the events on each, we're going to have to do quite a lot of JOINs (or other data querying). I'm wondering whether it would be more simple and performant to simply de-normalize as I describe in NOT wanting to do in my original post? :) The problem then is how to efficiently create many records for say a record which has 1000 subscribers? Actually, reads are probably more important than writes as the write part will be done in a background job of some sort, whilst the reads will be an web API. – jordelver Apr 6 '13 at 7:14

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.