diff --git a/backend/server/src/modules/blog/schema.sql b/backend/server/src/modules/blog/schema.sql index 7ed752f..a8d7b35 100644 --- a/backend/server/src/modules/blog/schema.sql +++ b/backend/server/src/modules/blog/schema.sql @@ -12,30 +12,54 @@ CREATE TABLE categories description TEXT DEFAULT '' ); +CREATE TABLE post_status +( + id SERIAL PRIMARY KEY, + name VARCHAR(20) UNIQUE NOT NULL +); + +INSERT INTO post_status (name) +VALUES ('draft'), + ('published'), + ('planned'), + ('hidden'); + CREATE TABLE posts ( - id UUID UNIQUE NOT NULL, - identifier VARCHAR(100) UNIQUE NOT NULL, - title VARCHAR(255) NOT NULL, - subtitle VARCHAR(255) NOT NULL, - published_date DATE NOT NULL, - last_update DATE, - content TEXT NOT NULL, - - category SERIAL REFERENCES categories (id) NOT NULL + id UUID PRIMARY KEY, + identifier VARCHAR(100) UNIQUE NOT NULL, + title VARCHAR(255) NOT NULL, + subtitle VARCHAR(255) NOT NULL, + date_created DATE NOT NULL, + date_updated DATE, + status INTEGER REFERENCES post_status (id) DEFAULT 1 NOT NULL, + content TEXT NOT NULL, + category INTEGER REFERENCES categories (id) NOT NULL ); CREATE TABLE post_tag ( - post UUID REFERENCES posts (id), - tag SERIAL REFERENCES tags (id) + post UUID REFERENCES posts (id) ON DELETE CASCADE, + tag INTEGER REFERENCES tags (id) ON DELETE CASCADE, + + CONSTRAINT post_tag_pk PRIMARY KEY (post, tag) ); CREATE TABLE metadata ( - pid UUID REFERENCES posts (id) NOT NULL, - meta_key VARCHAR(50) NOT NULL, - meta_value TEXT NOT NULL, + pid UUID REFERENCES posts (id) ON DELETE CASCADE NOT NULL, + meta_key VARCHAR(50) NOT NULL, + meta_value TEXT NOT NULL, - CONSTRAINT meta_pk PRIMARY KEY (pid, meta_key) + CONSTRAINT metadata_pk PRIMARY KEY (pid, meta_key) ); + +-- index +CREATE INDEX idx_tags_name ON tags (name); +CREATE INDEX idx_categories_name ON categories (name); +CREATE INDEX idx_posts_identifier ON posts (identifier); +CREATE INDEX idx_posts_status ON posts (status); +CREATE INDEX idx_posts_category ON posts (category); +CREATE INDEX idx_post_tag_post ON post_tag (post); +CREATE INDEX idx_post_tag_tag ON post_tag (tag); +CREATE INDEX idx_metadata_pid ON metadata (pid); \ No newline at end of file