Natural primary keys are a perfectly viable and reasonable as primary keys. However, there are some things to think about:
- One of the main uses of primary keys is for foreign key relationships. Integer primary keys are pretty small and all the same length. Strings are not as good for indexes, because they (usually) vary in length and are (often) longer than an integer.
- Are you sure that the definitions of the primary key will not change over time?
- Is it safe (from a privacy/security perspective) to have the external key visible in a bunch of tables (those with foreign key references).
I will say that synthetic foreign keys (i.e. the artificial ones created as numbers) can have downsides. If you do this for every database you create, then you have incompatible keys across the database. So, something like "product id" ends up depending on the system where it is defined -- which can cause unnecessary confusion.