I'm thinking about customizing CiviCRM such that custom data can be linked to Personal Campaign Pages. Here are some notes on how the database is set up:
Upon creating a new Custom Data Group, a new table is created called civicrm_value_[group_name]_[group_id] in which the data for this new group will be stored. Columns in this table are id, entity_id (i.e., the id of the user if this data is to be linked to a user), and custom columns for each of the new custom data fields in this group. A new record is also created in the civicrm_custom_group table.