title: SQL Design - Accounting for unknown values
body: <p>Say I have a table called HoursCharged</p>
  
  <pre><code>ChrgNum(varchar(10))   
  CategoryID(uniqueidentifier)   
  Month(datetime)   
  Hours(int)
  </code></pre>
  
  <p>CategoryID is a foreign key reference to another table in my database, which is just a name/ID pairing.  ChrgNum is guaranteed to be unique outside of this database, and so I only check to see if it exists in my db already.</p>
  
  <p>You should also know that this tool support several different groups from one database (hence the globally unique CategoryID, since different groups may potentially name the Categories the same thing, I needed to differentiate them).</p>
  
  <p>This table is populated from a CSV file.  The idea is that every combination of ChrgNum, CategoryID, and Month is going to be unique.  The report that is being run to create the import file can only see a certain range (i.e. a year).  Therefore the algorithm looks something like this:</p>
  
  <pre><code>IF (ChrgNum exists in database, CategoryID exists in database, 
      combo of ChrgNum/CategoryID/Month DOES NOT exist in table HoursBurned)
  THEN add a new row for this entry
  ELSE IF (ChrgNum exists in database, CategoryID exists in database,
      combo of ChrgNum/CategoryID/Month DOES exist in table HoursBurned)
  THEN update the existing row with the new Hours value.
  </code></pre>
  
  <p>This is all fine and good, except now my boss wants me to account for hours charged, in a particular month, for a known ChrgNum and an <em>unknown</em> Category.</p>
  
  <p>My question is, how do I account for this?  If I simply insert a NULL CategoryID, what happens if a totally seperate group charges hours to the same number and category?  My other idea was to create a new table for the unknown Categories, but if I do this, and the first import has two unknown categories while the next one has one of the two again (which can happen) what do I do?</p>
  
  <p>My head has been swirling around this for hours.  Any help is appreciated!</p>