kemono2/db/schema/public/accounts.sql

53 lines
1.6 KiB
MySQL
Raw Normal View History

2024-11-26 00:11:49 +01:00
-- accounts
CREATE TABLE account(
id serial PRIMARY KEY,
username varchar NOT NULL,
password_hash varchar NOT NULL,
created_at timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
role varchar DEFAULT 'consumer',
UNIQUE (username)
);
CREATE TABLE account_artist_favorite(
id serial,
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
account_id int NOT NULL REFERENCES account(id),
service varchar(20) NOT NULL,
artist_id varchar(255) NOT NULL,
PRIMARY KEY (service, id),
UNIQUE (account_id, service, artist_id)
);
CREATE INDEX ON account_artist_favorite(service, artist_id);
CREATE TABLE account_post_favorite(
id serial,
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
account_id int NOT NULL REFERENCES account(id),
service varchar(20) NOT NULL,
artist_id varchar(255) NOT NULL,
post_id varchar(255) NOT NULL,
PRIMARY KEY (service, id),
UNIQUE (account_id, service, artist_id, post_id)
);
CREATE TABLE notifications(
id bigserial PRIMARY KEY,
account_id int NOT NULL,
type SMALLINT NOT NULL,
extra_info jsonb,
created_at timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_seen boolean NOT NULL DEFAULT FALSE,
FOREIGN KEY (account_id) REFERENCES account(id)
);
CREATE INDEX account_idx ON account USING BTREE(username, created_at, ROLE);
CREATE INDEX ON account_post_favorite(service, artist_id, post_id);
CREATE INDEX notifications_account_id_idx ON notifications USING BTREE("account_id");
CREATE INDEX notifications_created_at_idx ON notifications USING BTREE("created_at");
CREATE INDEX notifications_type_idx ON notifications USING BTREE("type");