Как сделать в таблице в postges поле1 или поле2 одно поле обязятельным а другое нулом при значениях поля type_id 1 или 2. Т.е. если заполнено одно, другое не должно быть заполнено, там должен быть null.
Вот пример с использованием "ограничений":
col1 CHECK (((col2 IS NULL) AND (col1 IS NOT NULL)) AND type_id ==2) OR (((col1 IS NULL) AND (col2 IS NOT NULL)) AND type_id == 1)
type_id integer
col2 CHECK (((col1 IS NULL) AND (col2 IS NOT NULL)) AND type_id ==1) OR (((col2 IS NULL) AND (col1 IS NOT NULL)) AND type_id == 2)
А теперь если я буду добавлять поля, получается мне надо старые условия переписывать. Поидее если таблица наполнена данными и миграцией меняешь значение, и нет противоречий, то должно сработать.
Вообще задача такая есть теблица транзакций и таблица операций, они сввязаны по полю operation_id, одной операции соотвествует много транзакций. Вопрос если есть типы операций отличающиеся полями, писать их в одну табблицу с полем тип или в разные? Если в разные то несколько полей-ключей надо добавлять. Проблема с одной таблицей заключается в том, что во первых она может разрастаться в ширину, и надо переписывать ограничения старых полей, по мередобавления операций новых типов, как быть?