From 6358a7a59519786cd6c8fe8ebde3e6367b0ce967 Mon Sep 17 00:00:00 2001 From: rishi Date: Wed, 20 Nov 2024 22:19:53 +0000 Subject: [PATCH] Basic Blog schema for DB --- schema.sql | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 schema.sql diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..9c91bba --- /dev/null +++ b/schema.sql @@ -0,0 +1,39 @@ +CREATE TABLE users ( + id SERIAL PRIMARY KEY, + username VARCHAR(50) UNIQUE NOT NULL, + password_hash VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE posts ( + id SERIAL PRIMARY KEY, + title VARCHAR(255) NOT NULL, + slug VARCHAR(255) UNIQUE NOT NULL, + markdown_content TEXT NOT NULL, + compiled_content TEXT NOT NULL, + status VARCHAR(20) NOT NULL DEFAULT 'draft', -- draft, published + published_at TIMESTAMP WITH TIME ZONE, + created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, + author_id INTEGER REFERENCES users(id) +); + +CREATE TABLE tags ( + id SERIAL PRIMARY KEY, + name VARCHAR(50) UNIQUE NOT NULL, + slug VARCHAR(50) UNIQUE NOT NULL +); + +CREATE TABLE posts_tags ( + post_id INTEGER REFERENCES posts(id) ON DELETE CASCADE, + tag_id INTEGER REFERENCES tags(id) ON DELETE CASCADE, + PRIMARY KEY (post_id, tag_id) +); + +CREATE TABLE images ( + id SERIAL PRIMARY KEY, + filename VARCHAR(255) NOT NULL, + url VARCHAR(255) NOT NULL, + post_id INTEGER REFERENCES posts(id) ON DELETE CASCADE, + uploaded_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP +); \ No newline at end of file