Forums are a way to organize discussions about relevant project issues between project members. ]project-open[ forums implement the traditional discussion forum, but also utilizes the forum for task assignation, incident notifications and general news postings.
The datastructures for ]po[ Forums really look like the ones for a mail reader with topics (the messages) and a mapping between topics and users (im_forum_topic_user_map) to store whether a user has read a topic or filed the topic in one of his folders.
create table im_forum_topics ( -- administrative information topic_id integer constraint im_forum_topics_pk primary key, topic_name varchar(200), topic_path varchar(200), object_id integer not null constraint im_forum_topics_object_fk references acs_objects, parent_id integer constraint im_forum_topics_parent_fk references im_forum_topics, topic_type_id integer not null constraint im_forum_topics_type_fk references im_categories, topic_status_id integer constraint im_forum_topics_status_fk references im_categories, posting_date date, owner_id integer not null constraint im_forum_topics_owner_fk references users, scope varchar(20) default 'group' constraint im_forum_topics_scope_ck check (scope in ('pm', 'group','public','client','staff','not_client')), -- message content subject varchar(200) not null, message clob, -- task and incident specific fields priority number(1), due_date date, asignee_id integer constraint im_forum_topics_asignee_fk references users ); create table im_forum_topic_user_map ( topic_id integer constraint im_forum_topics_um_topic_fk references im_forum_topics, user_id integer constraint im_forum_topics_um_user_fk references users, -- read_p in ('f' or NULL) indicates "New" items read_p char(1) default 't' constraint im_forum_topics_um_read_ck check (read_p in ('t','f')), -- folder_id in (0 or NULL) indicates "Inbox" items -- folder_id = 1 indicates "Deleted" items -- folder_id for users start with 10 folder_id integer default 0 constraint im_forum_topics_um_folder_fk references im_forum_folders, receive_updates varchar(20) default 'major' constraint im_forum_topics_um_rec_ck check ( receive_updates in ('all','none','major')), constraint im_forum_topics_um_rec_pk primary key (topic_id, user_id) ); create table im_forum_folders ( folder_id integer constraint im_forum_folders_pk primary key, user_id integer constraint im_forum_folders_user_fk references users, parent_id integer constraint im_forum_folders_parent_fk references im_forum_folders, folder_name varchar(200) );
Related Object Types