Я пытаюсь сформулировать некоторые контрольные ограничения в SQL Anywhere 9.0.Sybase Check Constraint Evaluation
В принципе у меня есть схема, как это:
CREATE TABLE limits (
id INT IDENTITY PRIMARY KEY,
count INT NOT NULL
);
CREATE TABLE sum (
user INT,
limit INT,
my_number INT NOT NULL CHECK(my_number > 0),
PRIMARY KEY (user, limit)
);
Я пытаюсь заставить ограничение my_number
для каждого предела быть не более подсчета в таблице.
Я попытался
CHECK ((SELECT sum(my_number) FROM sum WHERE limit = limit) <= (SELECT count FROM limits WHERE id = limit))
и
CHECK (((SELECT sum(my_number) FROM sum WHERE limit = limit) + my_number) <= (SELECT count FROM limits WHERE id = limit))
, и они оба, кажется, не делать правильные вещи.
Итак, мой вопрос: с какой версией таблицы выполняются эти подзапросы? таблица перед вставкой или проверка подзапроса на согласованность после вставки происходит и откатывается, если она признана недействительной?