-- This table stores the # of read comments for a person, on a post -- It can then be joined to post_aggregates to get an unread count: -- unread = post_aggregates.comments - person_post_aggregates.read_comments create table person_post_aggregates( id serial primary key, person_id int references person on update cascade on delete cascade not null, post_id int references post on update cascade on delete cascade not null, read_comments bigint not null default 0, published timestamp not null default now(), unique(person_id, post_id) );