Which one of these two contact management database designs is correct or best practice?
In general. Recommended structure (assuming one user can fit into several categories):

users (user_id, 
       name, 
       -- etc., 
       primary key (user_id))

categories (cat_id, 
            category_type, -- shipper, supplier, etc.
            name, 
            -- etc., 
            primary key (cat_id))

users_to_categories (user_id, 
                     cat_id,  
                     -- etc.,
                     primary key (user_id, cat_id),  
                     foreign key (user_id) references users (user_id),  
                     foreign key (cat_id) references categories (cat_id))


If some user fits in more than one category there is more than one record in the last table with the same user_id and different cat_id.


  A user can only choose one category for example, supplier. If he wants to change to customer, he must delete his account first.


If so:

users (user_id, 
       cat_id,
       name, 
       -- etc., 
       primary key (user_id),
       foreign key (cat_id) references categories (cat_id))

categories (cat_id, 
            category_type, -- shipper, supplier, etc., ENUM
            name, 
            -- etc., 
            primary key (cat_id))