Sequel.migration do up do create_table(:members) do primary_key :id, type: :Bignum foreign_key :account_id, :accounts, type: :Bignum, null: false String :kind, null: false String :first_name String :last_name String :organization_name TrueClass :core_member, null: false, default: false index :account_id, unique: true constraint :members_kind_valid, Sequel.lit("kind IN ('individual', 'organization')") constraint :members_identity_matches_kind, Sequel.lit( "(kind = 'individual' AND first_name IS NOT NULL " \ "AND trim(first_name) <> '' AND last_name IS NOT NULL " \ "AND trim(last_name) <> '' AND organization_name IS NULL) " \ "OR (kind = 'organization' AND first_name IS NULL " \ "AND last_name IS NULL AND organization_name IS NOT NULL " \ "AND trim(organization_name) <> '')" ) constraint :members_core_member_individual, Sequel.lit("core_member = FALSE OR kind = 'individual'") end end down do drop_table(:members) end end