Files
MusicFS/db/schema.sql
T
2026-06-30 12:17:48 +02:00

48 lines
1.6 KiB
SQL

CREATE TABLE items (
inode BIGINT PRIMARY KEY,
name TEXT NOT NULL,
original_path TEXT NOT NULL,
local_path TEXT NOT NULL,
file_type TEXT NOT NULL CHECK (file_type IN ('directory', 'file')),
hash BIGINT NOT NULL
);
CREATE TABLE music_metadata (
inode BIGINT PRIMARY KEY REFERENCES items(inode) ON DELETE CASCADE,
track_title TEXT NOT NULL,
album TEXT NOT NULL,
track_number INTEGER NOT NULL,
header BYTEA NOT NULL,
real_audio_start BIGINT NOT NULL
);
CREATE TABLE music_metadata_artists (
inode BIGINT NOT NULL REFERENCES music_metadata(inode) ON DELETE CASCADE,
artist TEXT NOT NULL,
PRIMARY KEY (inode, artist)
);
CREATE TABLE music_metadata_other_tags (
inode BIGINT NOT NULL REFERENCES music_metadata(inode) ON DELETE CASCADE,
position INTEGER NOT NULL,
tag TEXT NOT NULL,
PRIMARY KEY (inode, position)
);
CREATE TABLE music_metadata_pictures (
inode BIGINT NOT NULL REFERENCES music_metadata(inode) ON DELETE CASCADE,
position INTEGER NOT NULL,
block_header BYTEA NOT NULL,
data_offset BIGINT NOT NULL,
data_length BIGINT NOT NULL,
PRIMARY KEY (inode, position)
);
-- Lazy byte cache for NetworkOrigin. Rows exist only for files the user has
-- actually read; reconcile invalidates a row when its hash changes.
CREATE TABLE cached_file_bytes (
inode BIGINT PRIMARY KEY REFERENCES items(inode) ON DELETE CASCADE,
data BYTEA NOT NULL,
fetched_at TIMESTAMPTZ NOT NULL DEFAULT now()
);