@grigorie1990

Как сделать таблицу в postgres c полями обязятельность которых зависит от поля тип?

Как сделать в таблице в 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, одной операции соотвествует много транзакций. Вопрос если есть типы операций отличающиеся полями, писать их в одну табблицу с полем тип или в разные? Если в разные то несколько полей-ключей надо добавлять. Проблема с одной таблицей заключается в том, что во первых она может разрастаться в ширину, и надо переписывать ограничения старых полей, по мередобавления операций новых типов, как быть?
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ответы на вопрос 1
YekitKsv
@YekitKsv
Developer
Можете схему таблиц показать? Мне кажется у вас ошибка в архитектуре... Или я не совсем понял что значит "типы операций, отличающиеся полями"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы