From 18722db340368f9999d4aba769c4f854ff9725f7 Mon Sep 17 00:00:00 2001 From: Iron_Felix Date: Fri, 10 Oct 2025 01:23:09 +0300 Subject: [PATCH] fix: topology sort for tables (references) --- modules/sql/scheme.sql | 74 +++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/modules/sql/scheme.sql b/modules/sql/scheme.sql index 7ae4ca1..bf946a5 100644 --- a/modules/sql/scheme.sql +++ b/modules/sql/scheme.sql @@ -9,13 +9,20 @@ CREATE TYPE storage_type_t AS ENUM ('local', 's3'); CREATE TYPE title_status_t AS ENUM ('finished', 'ongoing', 'planned'); CREATE TYPE release_season_t AS ENUM ('winter', 'spring', 'summer', 'fall'); -CREATE TABLE usertitles ( - usertitle_id serial PRIMARY KEY, - user_id int NOT NULL REFERENCES users, - title_id int NOT NULL REFERENCES titles, - status usertitle_status_t NOT NULL, - rate int CHECK (rate > 0 AND rate <= 10), - review_id int REFERENCES reviews +CREATE TABLE providers ( + provider_id serial PRIMARY KEY, + provider_name varchar(64) NOT NULL +); + +CREATE TABLE tags ( + tag_id serial PRIMARY KEY, + tag_names jsonb NOT NULL --mb constraints +); + +CREATE TABLE images ( + image_id serial PRIMARY KEY, + storage_type storage_type_t NOT NULL, + image_path varchar(256) UNIQUE NOT NULL ); CREATE TABLE users ( @@ -27,24 +34,11 @@ CREATE TABLE users ( creation_date timestamp NOT NULL ); -CREATE TABLE images ( - image_id serial PRIMARY KEY, - storage_type storage_type_t NOT NULL, - image_path varchar(256) UNIQUE NOT NULL -); - -CREATE TABLE reviews ( - review_id serial PRIMARY KEY, - user_id int NOT NULL REFERENCES users, - title_id int NOT NULL REFERENCES titles, - image_ids int[], - review_text text NOT NULL, - creation_date timestamp NOT NULL -); - -CREATE TABLE tags ( - tag_id serial PRIMARY KEY, - tag_names jsonb NOT NULL --mb constraints +CREATE TABLE studios ( + studio_id serial PRIMARY KEY, + studio_name varchar(64) UNIQUE, + illust_id int REFERENCES images (image_id), + studio_desc text ); CREATE TABLE titles ( @@ -67,19 +61,30 @@ CREATE TABLE titles ( AND episodes_aired <= episodes_all)) ); +CREATE TABLE reviews ( + review_id serial PRIMARY KEY, + user_id int NOT NULL REFERENCES users, + title_id int NOT NULL REFERENCES titles, + image_ids int[], + review_text text NOT NULL, + creation_date timestamp NOT NULL +); + +CREATE TABLE usertitles ( + usertitle_id serial PRIMARY KEY, + user_id int NOT NULL REFERENCES users, + title_id int NOT NULL REFERENCES titles, + status usertitle_status_t NOT NULL, + rate int CHECK (rate > 0 AND rate <= 10), + review_id int REFERENCES reviews +); + CREATE TABLE title_tags ( PRIMARY KEY (title_id, tag_id), title_id int NOT NULL REFERENCES titles, tag_id int NOT NULL REFERENCES tags ); -CREATE TABLE studios ( - studio_id serial PRIMARY KEY, - studio_name varchar(64) UNIQUE, - illust_id int REFERENCES images (image_id), - studio_desc text -); - CREATE TABLE signals ( signal_id serial PRIMARY KEY, raw_data jsonb NOT NULL, @@ -87,9 +92,4 @@ CREATE TABLE signals ( dirty bool NOT NULL ); -CREATE TABLE providers ( - provider_id serial PRIMARY KEY, - provider_name varchar(64) NOT NULL -); - COMMIT; \ No newline at end of file