Any particular reason we're using lowercase? (Isn't the ISO standard uppercase?) And are we saying that the right way to denote free is 0 + "usd"?

Do we need a unique constraint on (course_id, mode, currency)?