If changes and additions are permanent, you may need to sit down and better define the requirements. Now I can’t say that 30 columns are toomany, because it depends on how wide they are and whether it is something that needs to be transferred to the linked table. For instnce, if you have fields like phone1, phone2, phone 3, you have a mess that needs to be split into a linked table for user_phone. Or, if all your columns are wide (and the overall width of the table is wider than the pages on which the data is stored in the databases), and some of them are not so often needed for your queries, they may be better in a related table, one relation. I would probably not do this if you have no performance problem.
However, of all the possible options, the EAV model you described is the worst both in terms of performance and in terms of performance. It is very difficult to write decent queries for this model.
Hlgem source share