PostgreSQL に制約を追加して、(一連の列からの) 1 つの列に null 以外の値が含まれていることを確認する良い方法は何ですか?
更新: Create TableおよびAlter Tablecheck
で説明されている式を使用する可能性があります。
更新: 利用可能な関数を調べています。
更新:背景として、現在使用している 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
明確にするために、ここでは Ruby ではなく PSQL を探しています。すべての「真理値表」の可能性を列挙するよりもコンパクトなので、使用しているロジックを示したかっただけです。