An iModel is a distributed relational database, based on SQLite, with a schema defined by BIS. An iModel holds information about a single infrastructure asset. iModels may contain physical and functional models, drawings, specifications, analytical models, etc.
Many copies of an iModel may be extant simultaneously, each held in a briefcase and synchronized via ChangeSets from iModelHub. For programmers, a helpful analogy is Git and GitHub. In the same manner that every programmer has a full copy of a source code repository, with iModels every user has a full copy of the database.
An iModel holds information about a single infrastructure asset. They are each uniquely identified with a Globally Unique Identifier, so they can be tracked and secured by iModelHub. Each Briefcase maintains the GUID of its iModel so access to it can be controlled by its owner.
Every iModel has a single spatial coordinate system that may be positioned and oriented somewhere on the earth. In this manner multiple iModels can be oriented relative to one another, and relative to external reality models, cartographic and geographic information systems, etc.
iModels have a property called Project Extents that describes the volume of interest they occupy. All geometry in the spatial coordinate system of an iModel must be contained inside this volume.
The Base Infrastructure Schemas are a family of domain-specific class definitions that define the properties and relationships of entities within an iModel. All information held in an iModel is an instance of some class defined in BIS, inserted using the iModel.js API.
Within an iModel, logical subdivisions of information are defined by Models. There are many types of Models, corresponding to the type of information they hold (e.g. spatial, functional, drawing, etc.) There can be many instances of each type of Model in the same iModel.
Elements are the smallest independently addressable building block in BIS. Every Element is owned by (i.e. contained in) one and only one Model.
An iModel is an SQLite database. SQLite has extensive support for SQL, including indexing and comprehensive query planning. However, due to the mapping of BIS classes to database tables, direct use of SQL with iModels is not straightforward. Therefore, iModel.js includes ECSQL to form queries of iModels in terms of classes and property names, rather than table and column names. Internally ECSQL is converted to SQL and passed to SQLite to achieve outstanding performance.
Last Updated: 15 January, 2019