There is a table called custom_fields(profileid, moduleid, fieldid, fieldlabel) where you define fields, for example: phone, dob, dogs, descendants, and then in another table custom_fields_values(contactid, fieldid, value) you set values for each client / user field .
custom_fields
-------------
user1, contacts, 1000, Dogs
user1, contacts, 1001, Children
user2, contacts, 1002, Car Color
custom_fields_values
-------------
120,1000,4
120,1001,0
121,1000,0
121,1001,0
122,1002, Red
123,1002, Transparent :)
124,1002, Green
source
share