I want to ask you if there are (in practice) techniques for encoding a database in such a way, that table names are arbitrary and fields are encoded(not encrypted) in some way.
For example consider a class MVC in which model is devided in "low" and "high" level.The hight level communicates with the low level and the controller and the low level communicates with the high level and the DB.
The low level model knows about the DB structure and how it is encoded (and to translate between encoded structure and logical structure) and the high level knows only about DB logical structure.
Example: The actual DB contains table for users named "ff", which have fields "a"->for user id, "fdas"->for user name and "g12ds"->for password.
The hight level thinks that there is a table named "users", containing fields "uID", "uName", "uPass".
The low level knows about both and how to translate one to the other.
If the hight level wants to get a row where user name is "john1234", it asks the low level like $LOW->getRow("users.uName",EQUALS,"john1234"), then low level asks the db "select * from ff where fdas=='john1234'", translates the responce and returns to hight level a result like array("uName" => "john1234", "uID" => "75", "uPass" => "whatever")
The field values can also be encoded (like map 'a' to 'b', 'b' to 'c', '@' to 'g', 'g' to '+' and so on...) without affecting the search ability, as long as low-level model knows how to translate (and reverse the process).
The goal is to increase the security of the DB, for if an attacker gets to the data, he won't be able intuitively to tell in which table the users are stored and what are the user names.
My question is: is there an similar implementations in practice ?