-- 0076_track_song_link.up.sql — the same song on several releases counts as -- one song (Scribe milestone #498, #5438; operator decision D-b). -- -- A single and the album it came from each hold the song, and Lidarr keeps -- both: each fulfils its own release. Minstrel keeps both files and links -- them, so a like on one is a like on the song, and a mix or radio picks the -- song once rather than once per release. -- -- song_id is set only on a linked track, to the song_key the link chose. -- song_key is what everything reads: the track's own id until it is linked. -- No foreign key: the track whose id names a song may itself be merged away -- later, and the key still groups the copies left. ALTER TABLE tracks ADD COLUMN song_id uuid; ALTER TABLE tracks ADD COLUMN song_key uuid GENERATED ALWAYS AS (COALESCE(song_id, id)) STORED; CREATE INDEX tracks_song_key_idx ON tracks (song_key);