Самый чистый способ - как сказал Скотт Андерсон - использовать две колонки. Каждый атрибут должен быть атомарным, то есть иметь только одно значение. С многозначным столбцом вам придется применять функции (substr), чтобы показать, например, тип. Ограничения будет сложнее определить. Ничто не сравнится с простым "check (integer_type in (1,2,3))" или "check (id> 10000)".
Что касается определения вашего второго атрибута - давайте назовем его «id» - число, начинающееся с 10001, у вас есть две хорошие стратегии:
1) используйте одну последовательность, начинающуюся с 1, а для отображения используйте выражение «10000 + row_number () over (разделение по порядку integer_type по id)», чтобы пользователи могли видеть нужное число.
2) использовать три последовательности, по одной для каждого типа integer_, и позволить им начинаться с предложения 10001.
Причина, по которой вы обязательно должны использовать последовательности, - это масштабируемость. Если вы не используете последовательности, вам придется сохранить текущее значение в некоторой таблице и сериализовать доступ к этой таблице. И это не хорошо в многопользовательской системе. С помощью последовательностей вы можете установить свойство кэша, чтобы уменьшить практически все проблемы с конфликтами.
Надеюсь, это поможет.
С уважением,
Роб.