An application built on the Invantive Producer platform consists of three layers. The repository describes all three, and Invantive Studio generates the lower two from that description. ## Storage Layer The storage layer holds the data in normalised tables. The name of each table starts with the prefix of the application followed by an underscore, such as `bubs_opdrachten`. Every table has a technical primary key `id`, a natural key, a reference index for every foreign key, and a set of [[Invantive Studio/Repository/Concepts/Standard Columns|standard columns]] for the audit trail and for interfaces. Data in the storage layer is never changed directly. All changes pass through the business layer. ## Business Layer The business layer consists of [[Invantive Studio/Repository/Concepts/Business Object|business objects]]: views on the storage layer whose names end in `_v`. A business object is based on one main table and includes the columns of every table it refers to, directly or indirectly. Inserting, updating or deleting a row of a business object runs the [[Invantive Studio/Repository/Concepts/Attribute Rule|attribute rules]] and the [[Invantive Studio/Repository/Concepts/Hook Package|hook packages]] of the table, fills the audit columns and writes the [[Invantive Studio/Repository/Concepts/History|history]]. Reporting views, whose names end in `_r`, combine business objects for reporting. They are read-only. ## User Layer The user layer consists of the screens and reports that present the business layer to a user, such as the windows of Invantive Estate. They read and change the data only through the business layer, so every rule applies to every screen, report and interface alike.