CREATE TABLE tag (
id SERIAL NOT NULL,
name VARCHAR(30),
CONSTRAINT pk_tag PRIMARY KEY (id)
)
CREATE UNIQUE INDEX ix_tag_name ON tag (name)
CREATE TABLE "user" (
id SERIAL NOT NULL,
name VARCHAR(100) NOT NULL,
CONSTRAINT pk_user PRIMARY KEY (id)
)
CREATE TABLE email (
id SERIAL NOT NULL,
address VARCHAR(254) NOT NULL,
user_id INTEGER NOT NULL,
verified BOOLEAN NOT NULL,
CONSTRAINT pk_email PRIMARY KEY (id),
CONSTRAINT fk_email_user_id_user FOREIGN KEY(user_id) REFERENCES "user" (id)
)
CREATE INDEX ix_email_user_id ON email (user_id)
CREATE TABLE entry (
id SERIAL NOT NULL,
ctime TIMESTAMP WITHOUT TIME ZONE NOT NULL,
mtime TIMESTAMP WITHOUT TIME ZONE,
author_id INTEGER NOT NULL,
type VARCHAR NOT NULL,
CONSTRAINT pk_entry PRIMARY KEY (id),
CONSTRAINT fk_entry_author_id_user FOREIGN KEY(author_id) REFERENCES "user" (id)
)
CREATE TABLE facebookuser (
id VARCHAR(40) NOT NULL,
name VARCHAR(100) NOT NULL,
user_id INTEGER NOT NULL,
CONSTRAINT pk_facebookuser PRIMARY KEY (id),
CONSTRAINT fk_facebookuser_user_id_user FOREIGN KEY(user_id) REFERENCES "user" (id)
)
CREATE UNIQUE INDEX ix_facebookuser_user_id ON facebookuser (user_id)
CREATE TABLE token (
value VARCHAR(255) NOT NULL,
user_id INTEGER,
CONSTRAINT pk_token PRIMARY KEY (value),
CONSTRAINT fk_token_user_id_user FOREIGN KEY(user_id) REFERENCES "user" (id)
)
CREATE INDEX ix_token_user_id ON token (user_id)
CREATE TABLE article (
id INTEGER NOT NULL,
title VARCHAR(80) NOT NULL,
content TEXT NOT NULL,
views INTEGER NOT NULL,
popularity FLOAT NOT NULL,
CONSTRAINT pk_article PRIMARY KEY (id),
CONSTRAINT fk_article_id_entry FOREIGN KEY(id) REFERENCES entry (id)
)
CREATE TABLE comment (
id INTEGER NOT NULL,
parent_id INTEGER NOT NULL,
content TEXT NOT NULL,
CONSTRAINT pk_comment PRIMARY KEY (id),
CONSTRAINT fk_comment_id_entry FOREIGN KEY(id) REFERENCES entry (id),
CONSTRAINT fk_comment_parent_id_entry FOREIGN KEY(parent_id) REFERENCES entry (id)
)
CREATE TABLE vote (
user_id INTEGER NOT NULL,
entry_id INTEGER NOT NULL,
value SMALLINT CONSTRAINT vote_is_one CHECK (value = 1 OR value = -1),
CONSTRAINT pk_vote PRIMARY KEY (user_id, entry_id),
CONSTRAINT fk_vote_user_id_user FOREIGN KEY(user_id) REFERENCES "user" (id),
CONSTRAINT fk_vote_entry_id_entry FOREIGN KEY(entry_id) REFERENCES entry (id)
)
CREATE INDEX ix_vote_entry_id ON vote (entry_id)
CREATE TABLE articletag (
article_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
CONSTRAINT pk_articletag PRIMARY KEY (article_id, tag_id),
CONSTRAINT fk_articletag_article_id_article FOREIGN KEY(article_id) REFERENCES article (id),
CONSTRAINT fk_articletag_tag_id_tag FOREIGN KEY(tag_id) REFERENCES tag (id)
)
CREATE TABLE issue (
id INTEGER NOT NULL,
is_anonymous BOOLEAN NOT NULL,
CONSTRAINT pk_issue PRIMARY KEY (id),
CONSTRAINT fk_issue_id_article FOREIGN KEY(id) REFERENCES article (id)
)
CREATE TABLE solution (
id INTEGER NOT NULL,
issue_id INTEGER,
CONSTRAINT pk_solution PRIMARY KEY (id),
CONSTRAINT fk_solution_id_article FOREIGN KEY(id) REFERENCES article (id),
CONSTRAINT fk_solution_issue_id_issue FOREIGN KEY(issue_id) REFERENCES issue (id)
)