Вы можете сделать это с помощью ограничений 'vanilla', например, ограничения на уровне строк CHECK
, ограничения UNIQUE
, FOREIGN KEYS
, что делает его легко переносимым, например
CREATE TABLE TableA
(
ID INTEGER NOT NULL PRIMARY KEY,
MaxUsers INTEGER NOT NULL CHECK (MaxUsers > 0),
UNIQUE (ID, MaxUsers)
);
CREATE TABLE TableB
(
ID INTEGER NOT NULL,
MaxUsers INTEGER NOT NULL,
FOREIGN KEY (ID, MaxUsers)
REFERENCES TableA (ID, MaxUsers),
ID_occurrence INTEGER NOT NULL,
CHECK (ID_occurrence BETWEEN 1 AND MaxUsers),
UNIQUE (ID, ID_occurrence)
);
Для поддержки ID_occurrence
последовательность, вы можете создать «вспомогательный» хранимый процесс или триггер.