> Если хранить в 4х колонках, то запросы становятся тяжелыми
Смотря какие... но такая структура — тоже неправильная (ненормализованная), скорее всего.
> то как написать констреин на количество
Триггером, скорее всего.
> Причем тут сравнение яблок и апельсинов? Тип один. Что там лежит - понятно.
Вам понятно, а я не знаю, что Вы храните.
А "в общем" такие вещи бывают ограничены FK или constraints, например. И в случае массивов это всего (по умолчанию / простыми способами) просто нет — "гнилые яблоки". ;)