Сложное ограничение внешнего ключа в SQLAlchemy

У меня есть две таблицы, SystemVariables и VariableOptions . SystemVariables не требует пояснений, а VariableOptions содержит все возможные варианты выбора для всех переменных.

VariableOptions имеет внешний ключ, variable_id , который указывает, для какой переменной он является опцией. Системные переменные имеют внешний ключ, choice_id , который указывает, какая опция является выбранной в данный момент.

Я обошел круговую связь, используя use_alter на choice_id и post_update на SystemVariables ' choice отношения. Однако я хотел бы добавить дополнительное ограничение базы данных, которое будет гарантировать, что choice_id действителен (т.е. он относится к опции, которая ссылается на нее).

Логика, которая мне нужна, если предположить, что sysVar представляет строку в таблице SystemVariables , в основном:

VariableOptions[sysVar.choice_id].variable_id == sysVar.id

Но я не знаю, как построить такое ограничение используя SQL, декларативный или любой другой метод. При необходимости я мог бы просто проверить это на уровне приложения, но я бы хотел, чтобы это было на уровне базы данных, если это возможно. Я использую Postgres 9.1.

Возможно ли это?

9
задан Cam Jackson 6 December 2011 в 23:27
поделиться