Wcp Schema

last modified: October 21, 2005

Here's a minimally edited PostgreSql pg_dump of the database schema behind WikiChangeProposal.

Comments: surprisingly I need only 6 tables. I will only add one in the current iteration some form of page_links(referrer, referred) where pages are probably referred by the full key in wiki_pages_versions. There will always be the team "0" that will not be editable and the user "admin". The team "o" represents the RawMaterialsWiki. The current model is based on inclusion, a team specifies the members part of it, I'm thinking of maybe another table for exclusion based team (meaning all users can edit a version except those explicitly denied).

The tuple (page_name, team, version) is extracted from the database and use to retrieve the actual content from a module called WikiStorage that abstracts how page content is stored.


CREATE TABLE wiki_pages (
   page_name character varying(200) NOT NULL
);

CREATE TABLE wiki_teams (
   team_name character varying(100) NOT NULL,
   team_creator character varying(100) NOT NULL
);

CREATE TABLE wiki_pages_versions (
   page_name character varying(100) NOT NULL,
   team_name character varying(100) NOT NULL,
   last_version integer NOT NULL
);


CREATE TABLE wiki_users (
   username character varying(100) NOT NULL,
   is_anonymous boolean DEFAULT false NOT NULL -- anonymous means IP or hostname is stored as username
);


CREATE TABLE team_membership (
   team_name character varying(100) NOT NULL,
   username character varying(100) NOT NULL
);


CREATE TABLE change_log (
   page_name character varying(100) NOT NULL,
   team_name character varying(100) NOT NULL,
   username character varying(100) NOT NULL,
   version integer NOT NULL,
   change_date timestamp without time zone NOT NULL,
   change_comment character varying(200)
);

ALTER TABLE ONLY change_log
   ADD CONSTRAINT change_log_pk PRIMARY KEY (page_name, team_name, username, version);



ALTER TABLE ONLY team_membership
   ADD CONSTRAINT team_membership_pk PRIMARY KEY (team_name, username);


ALTER TABLE ONLY wiki_pages
   ADD CONSTRAINT wiki_pages_pk PRIMARY KEY (page_name);


ALTER TABLE ONLY wiki_pages_versions
   ADD CONSTRAINT wiki_pages_versions_pk PRIMARY KEY (page_name, team_name);


ALTER TABLE ONLY wiki_teams
   ADD CONSTRAINT wiki_teams_pk PRIMARY KEY (team_name);




ALTER TABLE ONLY wiki_users
   ADD CONSTRAINT wiki_users_pk PRIMARY KEY (username);


ALTER TABLE ONLY change_log
   ADD CONSTRAINT change_log_fk1 FOREIGN KEY (team_name) REFERENCES wiki_teams(team_name) ON UPDATE RESTRICT ON DELETE RESTRICT;

ALTER TABLE ONLY change_log
   ADD CONSTRAINT change_log_fk2 FOREIGN KEY (page_name) REFERENCES wiki_pages(page_name) ON UPDATE RESTRICT ON DELETE RESTRICT;


ALTER TABLE ONLY change_log
   ADD CONSTRAINT change_log_fk3 FOREIGN KEY (username) REFERENCES wiki_users(username) ON UPDATE RESTRICT ON DELETE RESTRICT;


ALTER TABLE ONLY team_membership
   ADD CONSTRAINT team_membership_fk1 FOREIGN KEY (team_name) REFERENCES wiki_teams(team_name) ON UPDATE CASCADE ON DELETE CASCADE;


ALTER TABLE ONLY team_membership
   ADD CONSTRAINT team_membership_fk2 FOREIGN KEY (username) REFERENCES wiki_users(username) ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE ONLY wiki_pages_versions
   ADD CONSTRAINT wiki_pages_versions_fk1 FOREIGN KEY (page_name) REFERENCES wiki_pages(page_name) ON UPDATE CASCADE ON DELETE CASCADE;


ALTER TABLE ONLY wiki_pages_versions
   ADD CONSTRAINT wiki_pages_versions_fk2 FOREIGN KEY (team_name) REFERENCES wiki_teams(team_name) ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE ONLY wiki_teams
   ADD CONSTRAINT wiki_teams_fk1 FOREIGN KEY (team_creator) REFERENCES wiki_users(username) ON UPDATE RESTRICT ON DELETE RESTRICT;

CategoryWikiChangeProposal


Loading...