 <p>I would go the one field approach. You could have three columns, <code>Name</code>, <code>Surname</code>, and <code>field_values</code>. In the <code>field_values</code> column, store a PHP <a href="http://php.net/serialize" rel="nofollow"><code>serialized</code></a> string of an array representing what would otherwise be your columns. For example, running:</p> <pre><code>array( ['col1'] =&gt; 'val', ['col2'] =&gt; 'val1', ['col3'] =&gt; 'val2', ['col4'] =&gt; 'val3' ) </code></pre> <p>through <code>serialize()</code> would give you:</p> <pre><code>a:4:{s:4:"col1";s:3:"val";s:4:"col2";s:4:"val1";s:4:"col3";s:4:"val2";s:4:"col4";s:4:"val3";} </code></pre> <p>and you can take this value and run it back through <code>unserialize()</code> to restore your array and use it however you need to. Loading/saving data within this array is no more difficult than changing values in the array before serializing it and then saving it to the <code>field_values</code> column.</p> <p>With this method you can have as many or few 'columns' as you need with no need for a ton of columns or tables.</p>