Which one is the best practice and Why?
Foreign key is from user.type to type.i
user.type
type.i
If typeName is a natural key, then it's probably the preferable option, because it won't require a join to get the value.
You should only really use a surrogate key (id) when the name is likely to change.