• Personally I think most tables should have a surrogate key, there are exceptions, but the rule is have one imho.

    Why? As I detail in my blog article - this is about concurrency, its about maintainability etc.

    So yes, if there is a candidate key available on the table that is integer then yes I would still recomemnd a surrogate to abstract the data from the relational plumbing and get some stability from possible changes to the natural key(s) that would cause havoc for concurrency.

    Tony.