Currently available tables for preferences are
provisioning.voip_preferences  | contains all available preferences, do not contain user data.  | 
provisioning.voip_preference_group  | contains preference group names, so the preferences can be put into groups.  | 
provisioning.voip_preferences_enum  | contains enum values for preferences, do not contain user data.  | 
The following tables contain user data and depend on voip_preferences
and optionally on voip_preferences_enum:
provisioning.voip_dev_preferences  | PBX device model preferences  | 
provisioning.voip_devprof_preferences  | PBX device profile preferences  | 
provisioning.voip_dom_preferences  | domain preferences,
replicated by triggers to   | 
provisioning.voip_contract_preferences  | customer preferences,
replicated by triggers to   | 
provisioning.voip_peer_preferences  | peering server preferences,
replicated by triggers to   | 
provisioning.voip_prof_preferences  | subscriber profile preferences  | 
provisioning.voip_reseller_preferences  | reseller preferences  | 
provisioning.voip_usr_preferences  | subscriber preferences,
replicated by triggers to   | 
Columns for table provisioning.voip_preferences
id  | primary key, used in user tables as the foreign key  | 
voip_preference_groups_id  | preference group id  | 
attribute  | preference name  | 
label  | tooltip that can be used as a mouseover tooltip on the UI  | 
type  | 0 - string, 1 - integer/boolean  | 
max_occur  | how many preferences with the name are allowed 0: list, 1: only one  | 
usr_pref  | defines if the preference can be used in subscribers  | 
prof_pref  | defines if the preference can be used in subcsriber profiles  | 
dom_pref  | defines if the preference can be used in domains  | 
peer_pref  | defines if the preference can be used in peering servers  | 
contract_pref  | defines if the preference can be used in customers  | 
contract_location_pref  | defines if the preference can be used in customer locations  | 
dev_pref  | defines if the preference can be used in PBX device models  | 
devprof_pref  | defines if the preference can be used in PBX device profiles  | 
fielddev_pref  | defines if the preference can be used in PBX devices that are assigned to a subscriber  | 
modify_timestamp  | preference last modification time  | 
internal  | preference if for internal use only and not shown in the UI/API  | 
expose_to_customer  | unused, as now there are dedicated customer preferences table  | 
data_type  | data type enum, boolean, int, string  | 
read_only  | ready only flag  | 
description  | long description of the preference  | 
dynamic  | set to 1 if it is a custom preference that is created by a user (usually for a PBX device model that requires specific ferences) but can be used for all preferences when needed  | 
reseller_pref  | defines if the preference can be used in resellers  | 
All tables are in database "provisioning".
So called "enum preferences" allow a fixed set of possible values, an enumeration, for preferences. Following the differences between other preferences are described.
Setting the attribute "data_type" of table "voip_preferences" to "enum" marks a preferences as an enum. The list of possible options is stored in table "voip_preferences_enum".
Columns for table provisioning.voip_preferences_enum are:
id  | primary key  | 
preference_id  | Reference to table voip_preferences.  | 
label  | A label to be displayed in frontends.  | 
value  | Value that will be written to voip_[usr  | 
dom  | peer]preferences.value if it is NOT NULL. Will not be written if it IS NULL. This can be used to implement a "default value" for a preference that is visible in frontends as such (will be listed first if nothing is actually selected), but will not be written to voip[usr  | 
dom  | peer]_preferences.value. Usually forcing a domain or peer default. Should also be named unambiguous (eg. "use domain default"). (Note: Therefore will also not be written to any kamailio table.)  | 
usr_pref  | Flag if this is to be used for usr preferences.  | 
dom_pref  | Flag if this is to be used for dom preferences.  | 
peer_pref  | Flag if this is to be used for peer preferences.  | 
default_val  | Flag indicating if this should be used as a default value when creating new entities or introducing new enum preferences (both done via triggers). (Note: For this to work, value must also be set.)  | 
Relevant triggers:
enum_update  | Propagates changes of voip_preferences_enum.value to voip_[usr  | 
dom  | peer]_preferences.value  | 
enum_set_default  | Will create entries for default values when adding a new enum preference. The default value is the tuple from voip_preferences_enum WHERE default_val=1 AND value NOT NULL.  | 
voip_dom_crepl_trig  | The trigger will set possible default values (same condition as for enum_set_default) when creating new domains.  | 
voip_phost_crepl_trig  | The trigger will set possible default values (same condition as for enum_set_default) when creating new peers.  | 
voip_sub_crepl_trig  | The trigger will set possible default values (same condition as for enum_set_default) when creating new subscribers.  | 
Find a usage example in a section in db-schema/db_scripts/diff/9086.up.