ALTER TABLE items ADD COLUMN min_grade SMALLINT; ALTER TABLE items ADD COLUMN max_grade SMALLINT; -- Backfill any existing shop rows to grade 1-1 (a normal single-grade item) -- before the constraint below starts requiring it. UPDATE items SET min_grade = 1, max_grade = 1 WHERE source = 'shop'; ALTER TABLE items ADD CONSTRAINT grade_matches_source CHECK ( (source = 'shop' AND min_grade >= 1 AND max_grade >= min_grade) OR (source = 'neutral' AND min_grade IS NULL AND max_grade IS NULL) );