У меня есть две таблицы, 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.
Возможно ли это?