Communication System
You have multiple ways to create a sort of dynamic page that auto updates (i.e. like Facebook).
Basic. The most basic method is, like you said, polling the server every X seconds (having a JavaScript infinite $.ajax({}); loop that is called each X seconds) to see if there are new things on the server. This is a valid solution, and it has been used in the past.
Push. A second way of doing this and is quite used also, is long polling or push. If you are using an asynchronous framework on the backend (i.e. Node.js, Tornado, Twisted etc.) you can very easily use this solution since it has almost no performance cost. With other back end frameworks like PHP or Django, this is not a good way of doing it since you create a process per each request that stays open until something is updated or the time out for the Http connection is being reached (people put most of the time, from what I saw, a 30s timer on the long polling).
Sockets. This is the newest and most unsupported way of doing this. Not all browsers have yet access to WebSockets. As before an asynchronous framework is better for this approach.
If you are having a CGI base back en framework (this implies WCGI, FastCGI, etc) like Django , PHP, Flask, etc. then you are better taking the first approach, which is the most basic one. Taking any other is very resource costly for your servers. If you have an async back end, then either the 2nd or 3rd approach are ok.
I must say that the web sockets approach is a bit harder to get into, program correctly and support the framework.
Database System
After you chose what you want to use as a communication system, your database design need to reflect the new query types you need to do.
Let's say the user wants to see all the new changes since he loaded the page.
A simple way of doing it would be to have a date on each row, which is the time of the last change. Query for all rows that changed since last query time.
A more complex way of doing it is to implement a full notification system. For each change or new row, a new notification about it will be added. You can do a relation between a user and notifications to know if he has already seen it, and have a job scheduled each 24h to delete old relations. But very soon this all becomes bloated. I prefer using a NoSQL database (JSON one like CouchDB) for the notification system. You can easily change the structure of the documents and create specific views for all notifications. It is more lenient to work with than a relational database. If you want to know if your data has changed after user loaded the page, all you have to do is query the type of notification (what data/table you are observing for changes) and get the ones with a creation date newer than the last queried time and also non-viewed. Since your table always reflects the last state, on page load you query the table and afterwards you only query for changes or here called notifications.
My Personal Take
If you are having a CGI backend, for a complete notifications system you will require a specific back end structure added on top of yours for either long polling or sockets. Don't forget your client needs to also have logic on how to react to the new server handlers. For quick results, if your job specifies this, you are better suited with just a script in your page that reloads the page each 1 minute or so.
If you are already using an asynchronous framework, you can easily add the notifications functionality but will require hard work on the database, especially if the notifications are in a relational one. If you decide to add a new database specifically for this, it requires also a lot of app logic on your back end plus the training for it.
Hope I helped, cheers!