Se sei un purista della normalizzazione dei database ti do ragione, credo però che la differenza sia l'utilizzo nella pratica:
per esperienza è sempre megli usare chiavi che non sono visibili o inserite dall'utente proprio perchè l'utente è un "pasticcione"
E' meglio fare vedere il codice e magari fare una routine che ne garantisca l'unicità che fargli inserire un campo chiave, così eviti tutti i casi:
1. ho inserito un codice ma ho sbagliato e magari me ne accordo dopo avere fatto ordini e fatture (se il DB gestisce l'integrità referenziale magari te la corregge lui però a volte bisogna fare routine apposite)
2. ho un codice con caratteri speciali o particolati e magari da qualche problema gestirli (cambi magari DBMS, è meglio vedere dei caratteri strani nel codice che nel campo chiave)
3. ho il codice di 10 caratteri però ora mi serve a 18 (cambi il formato del campo nei field relazione di tutte le tabelle collegate)
4. ho prodotti con lo stesso codice perchè l'univocità me la da la versione del prodotto (chi usa delle ricette ad esempio)
Riassumendo direi che è meglio avere sempre a che fare con una, e una sola, chiave di cui sai il tipo e rimane sempre quello (e non la si fa gestire ad un utente finale)