Pooru/migrations/pooru_1_up.sql

35 lines
1 KiB
SQL

PRAGMA journal_mode = WAL;
CREATE TABLE media(
id INTEGER PRIMARY KEY,
storage_id TEXT (64) NOT NULL UNIQUE,
filename TEXT (256) NOT NULL,
content_type TEXT (256),
upload_datetime TEXT (32) DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE kind(
id TEXT (32) PRIMARY KEY,
name TEXT (256) NOT NULL UNIQUE
) WITHOUT ROWID;
CREATE TABLE tag(
id INTEGER PRIMARY KEY,
name TEXT (256) NOT NULL,
kind_id TEXT (32) REFERENCES kind(id) ON UPDATE CASCADE,
display TEXT (289) AS (concat_ws(':', kind_id, name)) STORED,
UNIQUE (name, kind_id)
);
CREATE INDEX tag_name_idx ON tag(name);
CREATE UNIQUE INDEX tag_name_kind_id_idx ON tag(name, kind_id);
CREATE UNIQUE INDEX tag_display_idx ON tag(display);
CREATE TABLE media_tag(
media_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
FOREIGN KEY (media_id) REFERENCES media(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tag(id) ON DELETE CASCADE,
PRIMARY KEY (media_id, tag_id)
);
CREATE INDEX media_tag_media_id_idx ON media_tag(media_id);
CREATE INDEX media_tag_tag_id_idx ON media_tag(tag_id);