title: More efficient to have more columns or more rows?
body: <p>I'm currently redesigning a database which could contain a lot of data - I have the option to either include a number of different columns in the database or use a lot of rows instead. It's probably easier if I did some kind of outline below:</p>
  
  <pre><code>item_id | user_id | title | description | content | category | template | comments | status
  -------------------------------------------------------------------------------------------
  1       | 1       | ABC   | DEF         | GHI     | 1        | default  | 1        | 1
  2       | 1       | ZYX   |             | QWE     | 2        | default  | 0        | 1
  3       | 1       | A     |             | RTY     | 2        | default  | 0        | 0
  4       | 2       | ABC   | DEF         | GHI     | 3        | custom   | 1        | 1
  5       | 2       | CBA   |             | GHI     | 3        | custom   | 1        | 1
  </code></pre>
  
  <p>Versus something in the following structure:</p>
  
  <pre><code>item_id | user_id | attribute   | value
  ---------------------------------------
  1       | 1       | title       | ABC
  1       | 1       | description | DEF
  1       | 1       | content     | GHI
  ...     | ...     | ...         | ...
  </code></pre>
  
  <p>I may want to create additional attributes in the future (50 for arguments sake) - so there could be a lot of empty cells if using multiple columns. The attribute names would be reused, where possible, across different types of content - say a blog entry, event, and gallery - <code>title</code> would easily be reused.</p>
  
  <p>So my question is, is it more efficient to use multiple columns or multiple rows - in terms of query speed and disk space. Or would you instead recommend relationship tables, so there's a table for blogs, a table for events, etc. I'm just trying to come up with an easily expandable solution, where I ideally do not want to create a table for every kind of content as I'm thinking of developers creating new kinds of content via an app/API system (with attributes being tightly controlled).</p>
  
  <p><strong>Supplementary Question if Multiple Rows</strong></p>
  
  <p>How could I, in MySQL, convert multiple rows into a usable column format (I guess temporary tables) - so I could do some filtering by content type, as an example.</p>