title: SQL: store data field choices in application or in separate table?
body: <p>Given the following SQL table:</p>
  
  <pre><code>Ticket:
  - id (primary)
  - state
  - created
  </code></pre>
  
  <p>I want to limit the state to a set of predetermined choices, for example open, pending, closed. Should a given state be stored as a single string for each table row, depending on the application to decide which strings (choices) are allowed? Or should the state be a foreign key of a separate table that stores all allowed values, such as:</p>
  
  <pre><code>Ticket:
  - id (primary)
  - state (foreign)
  - created
  
  TicketState
  - id (primary)
  - name
  </code></pre>
  
  <p>The second options seems better but for large tables with a ton of choices it seems the number of these "extra" tables grows rapidly. What's the most common approach to this?</p>