An architecture for the initial development and later adaptation of information systems comprising a database, one or more clients and any number of supporting libraries whose system data, application data and rule data are stored in the database alongside the content data so that the correctness of the system can be conclusively verified without having to test every combination of behaviour at run-time.
A framework in the database stores system, application and rule data and frameworks in the clients load the system, application and rule data to generate objects and, in doing so, define an domain-specific system. The integrity of system and application data is maintained by the database though predefined triggers and the integrity of content data is maintained by the database through triggers loading rule data and executing the rule definitions calling functions in dynamically linked libraries. The integrity of system and application data is maintained by each client though predefined rules in the meta system and the integrity of content data is maintained by the clients through an interpreter using rule data and executing the rule definitions calling functions in dynamically linked libraries.
Preferably the system structures, application structures, system data, application data, rule data and content data are stored in the same relational database but may instead be stored in different relational databases, in non-relational databases, in any persistent store or an in-memory structure; all application-specific properties and events are stored in the database but some properties and events can be stored external to the database; the integrity checking occurs both at the user-interface or client and then again at the database but such checks could occur any number of times at the point of selecting the options in the user-interface, in a middleware application through which data is passed between the user-interface or client and the database, or on committing the changes in the database.