• I think that the article is on target.  I am no newbie and I have grown to love appreciate the combined code table (scenario 2).  I would say that this solution is most useful for codes that are defined within an application and hidden for most external use.

    In my experience it is not too confusing to use a self-reference for code type values within the table, but I have yet to see referential integrity enforced in the database, as it is just too blind and disallows a great deal of flexibility and value.  That's another topic I suppose.

    Celko's points are valid when the codes are externally defined and strongly typed/formatted.  I would never put country codes in the same table with diagnosis codes.   In some of these cases the number of codes is very large and, in any case, deserve separate maintenance.

    Also, I've found that a simple function call is SOOOOO much better than a join to do a code lookup!