Триггером например before insert смотреть пересекается ли новый диапазон или нет. Если не должно быть пересечений вообще, то select count(id) from t where (new.from<=t.from and new.to>=t.to) or (new.from<=t.from and new.to<=t.to) or (new.from>=t.from and new.to>=t.to) Если записи есть, значит кидаешь эксепшон например Вроде так