Я мог бы представить комбинацию триггеров и ограничений / индексов. На самом деле, вы могли бы просто использовать триггеры, но для этого нужно обрабатывать обновления, вставки и удаления.
Вместо этого вы можете изменить threads
, чтобы иметь два дополнительных столбца:
- Количество пользователей
- Массив пользователей
Вы можете поддерживать их в актуальном состоянии с помощью триггеров. На самом деле, первое действительно не нужно.
Затем вы можете создать проверочное ограничение:
alter table t add constraint chk_t_num_users (num_users <= 10);
Если вы сохраняете массив в отсортированном порядке, вы можете просто добавить уникальный индекс:
create unique index unq_t_users on (users);
Или вы можете определить свою собственную функцию sort_array()
, как в этом ответе .