fix: topology sort for tables (references)

This commit is contained in:
Iron_Felix 2025-10-10 01:23:09 +03:00
parent 8b317ae655
commit 18722db340

View file

@ -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 title_status_t AS ENUM ('finished', 'ongoing', 'planned');
CREATE TYPE release_season_t AS ENUM ('winter', 'spring', 'summer', 'fall'); CREATE TYPE release_season_t AS ENUM ('winter', 'spring', 'summer', 'fall');
CREATE TABLE usertitles ( CREATE TABLE providers (
usertitle_id serial PRIMARY KEY, provider_id serial PRIMARY KEY,
user_id int NOT NULL REFERENCES users, provider_name varchar(64) NOT NULL
title_id int NOT NULL REFERENCES titles, );
status usertitle_status_t NOT NULL,
rate int CHECK (rate > 0 AND rate <= 10), CREATE TABLE tags (
review_id int REFERENCES reviews 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 ( CREATE TABLE users (
@ -27,24 +34,11 @@ CREATE TABLE users (
creation_date timestamp NOT NULL creation_date timestamp NOT NULL
); );
CREATE TABLE images ( CREATE TABLE studios (
image_id serial PRIMARY KEY, studio_id serial PRIMARY KEY,
storage_type storage_type_t NOT NULL, studio_name varchar(64) UNIQUE,
image_path varchar(256) UNIQUE NOT NULL illust_id int REFERENCES images (image_id),
); studio_desc text
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 titles ( CREATE TABLE titles (
@ -67,19 +61,30 @@ CREATE TABLE titles (
AND episodes_aired <= episodes_all)) 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 ( CREATE TABLE title_tags (
PRIMARY KEY (title_id, tag_id), PRIMARY KEY (title_id, tag_id),
title_id int NOT NULL REFERENCES titles, title_id int NOT NULL REFERENCES titles,
tag_id int NOT NULL REFERENCES tags 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 ( CREATE TABLE signals (
signal_id serial PRIMARY KEY, signal_id serial PRIMARY KEY,
raw_data jsonb NOT NULL, raw_data jsonb NOT NULL,
@ -87,9 +92,4 @@ CREATE TABLE signals (
dirty bool NOT NULL dirty bool NOT NULL
); );
CREATE TABLE providers (
provider_id serial PRIMARY KEY,
provider_name varchar(64) NOT NULL
);
COMMIT; COMMIT;