As others have stated, this is very subjective and where there are no absolute rights (that being said, there certainly might be a wrong way to do it, or at least some unfavourable ones).
Personally I'd create a table called "category" with fields id_cate, name_cate and description_cate (or something alike, but you get the basic idea). The reason why one would concatenate every name with "_cate" is that when you do link tables together in a query where fields have the same name, you will now by its extension what table it belongs to, therefor eliminating the need to do
select * from Table1Name inner join Table2Name on Table1Name.ID = Table2Name.ID
You will just write:
select * from Table1Name inner join Table2Name on id_tab1 = id_tab2
As I said and has been stated by others, there is no best way to do this. Everyone just develops a style / technique that they are most comfortable with and seems most readable. As long as you are consistent and comfortable with your style it doesn't matter that much.