-- +goose Up CREATE TABLE playlist_groups ( id SERIAL PRIMARY KEY, playlist_id INTEGER NOT NULL REFERENCES playlists(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL CHECK (length(trim(name)) > 0), position INTEGER NOT NULL CHECK (position >= 0), end_mode TEXT NOT NULL DEFAULT 'repeat' CHECK (end_mode IN ('repeat', 'stop', 'next')), UNIQUE (playlist_id, id) ); ALTER TABLE playlist_tracks ADD COLUMN group_id INTEGER; ALTER TABLE playlist_tracks ADD CONSTRAINT playlist_tracks_group_fk FOREIGN KEY (playlist_id, group_id) REFERENCES playlist_groups(playlist_id, id); ALTER TABLE game_music_states ADD COLUMN group_id INTEGER; ALTER TABLE game_music_states ADD CONSTRAINT game_music_states_group_fk FOREIGN KEY (playlist_id, group_id) REFERENCES playlist_groups(playlist_id, id); -- +goose Down ALTER TABLE game_music_states DROP COLUMN group_id; ALTER TABLE playlist_tracks DROP COLUMN group_id; DROP TABLE playlist_groups;