When a big database is shared between many applications, it is sometimes hard to understand who is using what and what would happen if the database schema changes. On the other hand, when a database is big and complex, changing the data structure is a constant process: business requirements do change, new features got developed, and refactoring of the database itself for the sake of normalization is quite usual.
In that case, it makes sense to build the whole system using layered architecture. The physical data structure is located at the first layer. Applications do not access it directly.
Moving upward from the bottom, the second layer contains structures that abstract logical entities from their physical implementation. These structures play the role of data abstraction interfaces. There are several ways to implement them. They can be created...