1. A method implemented in a system that includes a database for storing input data and a server, the method comprising: the server managing multiple versions of the input data, wherein each version of the input data is stored as a record in the database with each record having an identifier and a version field; the server receiving a query for data; in response to the query, identifying whether the requested data is available in a cache; if the requested data is not available in the cache, identifying an analytic to calculate data from input data; retrieving from a database input data associated with the analytic and storing the input data in the cache, if not already present in the cache, wherein the input data are stored in the cache in one or more pages of records with a list of identifiers and a set of versions for each identifier, wherein at least one record has multiple versions; using the analytic to perform calculations with the analytic on the records of input data determined to have the correct version related to the query to produce calculated data, wherein multiple versions of a record are based on multiple plans, and wherein the query is associated with a plan and the correct version of a record is determined based on the plan with which the query is associated; storing the calculated data into the cache; and downloading a schema which is used to generate a data access layer, the data access layer exposing tables in the database as classes with properties corresponding to fields in the tables, and in response to changes made to the schema, automatically regenerating the access layer.