diff --git a/database_schematic.pgsql b/database_schematic.pgsql new file mode 100644 index 0000000..d80c8c0 --- /dev/null +++ b/database_schematic.pgsql @@ -0,0 +1,46 @@ +CREATE TABLE boards ( + board_id VARCHAR(5) PRIMARY KEY, + board_name VARCHAR(32) NOT NULL, + threads_ids INT8[] +); + +CREATE TABLE threads ( + thread_id SERIAL8 PRIMARY KEY, + thread_name VARCHAR(32), + root_post_id INT NOT NULL, + posts_ids INT[] +); + +CREATE TABLE media ( + media_id VARCHAR(22) PRIMARY KEY -- format: ${thread_id}-${media_number}, len(thread_id) = 20, + "-" + len(media_number) = 1 = 22 +); + +CREATE TABLE posts ( + post_id SERIAL8 PRIMARY KEY, + content TEXT NOT NULL, + media_ids VARCHAR(22)[], + is_root BOOL NOT NULL, + date DATE NOT NULL, + internal_id INT NOT NULL, -- id of the post inside of the thread + user_ip CIDR NOT NULL +); + +CREATE TABLE admins ( + login VARCHAR(16) PRIMARY KEY, + password_hash CHAR(60) NOT NULL, + privelege_name VARCHAR(16) NOT NULL +); + +CREATE TABLE priveleges ( + privelege_name VARCHAR(16) PRIMARY KEY, + access_level INT2 NOT NULL +); + +CREATE TABLE bans ( + ban_id SERIAL8 PRIMARY KEY, + user_ip CIDR NOT NULL, + duration INT8, -- duration in seconds + reason VARCHAR(255), + date DATE NOT NULL, + admin_issued VARCHAR(16) NOT NULL +); \ No newline at end of file