Как лучше хранить настройки пользователей в базе данных?
Храните в отдельном месте настройки по-умолчанию. Для пользователей храните в json/xml виде только отличающиеся от дефолтных настройки. Суммарные настройки пользователя получатся путем наложения отличающихся на настройки по-умолчанию. Таким образом при добавлении новой настройки изменится только один конфиг — общий, и тем не менее он будет доступен у пользователя. А при изменении пользователем такой настройки измененное значение запишется в его личный конфиг.
Если хранить как поле=значение, то появляется недостаток в обработке вложенных свойств. Например, у приложения есть окна, и в каждом окне может быть применен свой стиль. Естественно, что все, что принадлежит данному окну, группируется «в виде дерева». В данном случае удобен XML. Недостаток такого метода думаю ясен — приходится загружать полностью все поле, а затем его обрабатывать. Но достоинство — все красивенько сгруппировано, не сложно обрабатывать и не сложно отобразить в каком-либо отчете