'К сожалению' красивого решения тут нет.
Единственный способ скрыть структуру базы данных - это поставить между ней и приложением прослойку, подменяющую эту структуру. По факту это форма обфускации, только не кода а логики.
И легко это не сделать. Помимо собственно разработки этой прослойки (готовых решений тут само собой быть не может), понадобится разработать новые структуры данных, с одной стороны совместимые со структурой данных в базе данных, но с другой стороны, не предоставляющих готовых решений для получения этой структуры.
Самое 'простое' направление - перенести в эту прослойку абсолютно всю логику приложения, оставив 'снаружи' только отображение. Грубо говоря вместо таблиц users,documents,rights дать объекты-страниц/форм - авторизация пользователя, чтение, создание и редактирование документов. Помню для веб очень удачно с этим справлялись xml/xslt (между сервером и приложением гуляет xml, а в xslt описывается интерфейс, т.е. View в идеологии MVC), поддержка которых встроена в браузер до сих пор...
Правда по факту большая часть работы будет именно в этой прослойке, и не понятно что тогда останется разработчикам.
p.s. так ли важны и ценны эти структуры данных? стоит ли их сохранение затраченных усилий?