title: Advantages/disadvantages of storing an Integer instead of the actual string in a table
body: <p>I've been asked to re-design an existing database and one of things I've noticed is that they store all their dropdown values as strings rather than int.</p>
  
  <p>As a habit, I've always store the combo values in one table and associated each string with a specific Id and store the Id value in the metadata table that is used searching. An <code>INNER JOIN</code> is then used when searching for the relevant value, but I thought check first to see if there are scenarios out there were you are better of storing the string.</p>
  
  <p>The obvious flaws that come to mind when storing a <code>string</code> instead of an <code>int</code> are:</p>
  
  <ul>
  <li>Poor normalization.</li>
  <li>Larger table size.</li>
  <li>Slower update if specific column value needs to be renamed.</li>
  </ul>
  
  <p>The points I'm not sure about are (on a large scale i.e. millions of records):</p>
  
  <ul>
  <li><p>Is there any reason why you would a store string rather than an integer apart from the 3 points I've just mentioned.</p></li>
  <li><p>How are indexes affected by this? Larger? Slower?</p></li>
  <li><p>Is it faster to run a query directly against a specific string rather than using a <code>INNER JOIN</code> against another table to match the relevant string against the integer value that is associated with this relevant string?</p></li>
  <li><p>Is there any kind of "Rule of thumbs" I should be aware of?</p></li>
  </ul>
  
  <p>Is there other advantages or disadvantages I should be aware of when using one method or the other?</p>