смешивать таблицы и объекты - плохая идея, в первую очередь потому что на практике реальный объект описывается комбинацией разных таблиц, и клиенту совершенно не интересно как он хранится в бд и почему именно так, как его туда сохранять. Это только в простых и маленьких ис можно напрямую мапить объекты вроде юзера на таблицы. У меня например юзер это десяток разных таблиц. И когда клиент споашивает, он вполне комфортно сшивается и отдается. А когда нужна часть юзера - отдается или меняется эта часть, другая даже не блокируется. Инкапсуляция хранения структуры внутри бд, и влияния логики изменения юзера на другие таблицы, полиморфизм юзеров, наследование через добавление свойств и методов доступа к новым типам юзеров. Кажется это и называется ооп, не так ли? Попытка натянуть ооп непосредственно на таблицы приводит новичков к хранению json полей, со всеми вытекающими побочными эффектами.