-- -- Artists (should be applicable to all art) -- CREATE TABLE artist ( id uuid DEFAULT gen_random_uuid(), name text NOT NULL, website text, avatar text ); ALTER TABLE artist ADD CONSTRAINT artist_pk PRIMARY KEY (id); -- -- Music releases -- CREATE TABLE musicrelease ( id character varying(64) NOT NULL, title text NOT NULL, description text, type text, release_date DATE NOT NULL, artwork text, buyname text, buylink text ); ALTER TABLE musicrelease ADD CONSTRAINT musicrelease_pk PRIMARY KEY (id); -- -- Music links (external platform links under a release) -- CREATE TABLE musiclink ( release character varying(64) NOT NULL, name text NOT NULL, url text NOT NULL ); ALTER TABLE musiclink ADD CONSTRAINT musiclink_pk PRIMARY KEY (release, name); -- -- Music credits (artist credits under a release) -- CREATE TABLE musiccredit ( release character varying(64) NOT NULL, artist uuid NOT NULL, role text NOT NULL, is_primary boolean DEFAULT false ); ALTER TABLE musiccredit ADD CONSTRAINT musiccredit_pk PRIMARY KEY (release, artist); -- -- Music tracks (tracks under a release) -- CREATE TABLE musictrack ( id uuid DEFAULT gen_random_uuid(), title text NOT NULL, description text, lyrics text, preview_url text ); ALTER TABLE musictrack ADD CONSTRAINT musictrack_pk PRIMARY KEY (id); -- -- Music release/track pairs -- CREATE TABLE musicreleasetrack ( release character varying(64) NOT NULL, track uuid NOT NULL, number integer NOT NULL ); ALTER TABLE musicreleasetrack ADD CONSTRAINT musictrack_pk PRIMARY KEY (release, track); -- -- Foreign keys -- ALTER TABLE musiccredit ADD CONSTRAINT musiccredit_artist_fk FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE musiccredit ADD CONSTRAINT musiccredit_release_fk FOREIGN KEY (release) REFERENCES musicrelease(id) ON DELETE CASCADE; ALTER TABLE musiclink ADD CONSTRAINT musiclink_release_fk FOREIGN KEY (release) REFERENCES musicrelease(id) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE musicreleasetrack ADD CONSTRAINT music_pair_trackref_fk FOREIGN KEY (release) REFERENCES musicrelease(id) ON DELETE CASCADE; ALTER TABLE musicreleasetrack ADD CONSTRAINT music_pair_releaseref_fk FOREIGN KEY (track) REFERENCES musictrack(id) ON DELETE CASCADE;