Каковы хорошие способы добавления ограничения на PostgreSQL для проверки того, что ровно один столбец (из набора столбцов) содержит ненулевое значение?
Обновление. Вероятно, я хочу использовать выражение check
, как описано в Создать таблицу, и Изменить таблицу.
Обновление: я просматриваю доступные functions.
Обновление: только для фона, вот логика проверки Rails, которую я сейчас использую:
validate :multi_column_validation
def multi_column_validation
n = 0
n += 1 if column_1
n += 1 if column_2
n += 1 if column_3
unless 1 == n
errors.add(:base, "Exactly one column from " +
"column_1, column_2, column_3 must be present")
end
end
Чтобы быть ясным, я ищу PSQL, а не Ruby, здесь. Я просто хотел показать логику, которую я использую, поскольку она более компактна, чем перечисление всех возможностей "таблицы истинности".