title: MS SQL: One Large, Multi-Column dbo.Person table or Multiple Subsets With Multiple Joins?
body: <p>I am thinking through the layout of my "Person" table in my MSSQL DB. 
  Is it better to have all columns in dbo.Person as such:</p>
  
  <pre><code>Person
  (
  personid
  first
  last 
  email
  confirmcode
  isconfirmed
  homeaddress
  homecity
  homestate
  homezip
  session
  ipaddress
  workaddress
  workcity
  workstate
  workzip
  etc...
  )
  </code></pre>
  
  <p>OR, is it better to partition the table into related tables like so:</p>
  
  <pre><code>Person
  (
  personid,
  first,
  last
  )
  
  Email
  (
  emailid,
  personid,
  email,
  confirmcode,
  isconfirmed,
  modifydate,
  createdate
  )
  
  Session
  (
  sessionid,
  personid,
  session,
  activitydate
  )
  
  HomeAddress
  (
  homeaddressid,
  personid,
  address,
  city,
  state,
  zip
  )
  
  WorkAddress
  (
  workaddressid,
  personid,
  address,
  city,
  state,
  zip
  )
  </code></pre>
  
  <p>I have read arguments for both. The former (one table) says that performance takes a hit because of the need for multiple joins when returning data. I have also read that having multiple tables reduces future fires when you have to add or remove new columns related to a given grouping (for example, adding an alternate email address will create NULLs in your Person table). </p>
  
  <p>Thoughts? </p>