Object Identifiers and Internal Identifiers

Each Repository object has an identifier called the object identifier that distinguishes it from all other Repository objects represented in all other Repository databases. The object identifier has the following format.

The first 16 bytes of each object identifier constitute a globally unique identifier (or GUID). The next 4 bytes constitute a local identifier.

Each Repository object also has an internal identifier that distinguishes it from every other object within the same Repository database. The internal identifier is an 8-byte quantity of the following form.

The first 4 bytes constitute a site identifier (site ID). The last 4 bytes constitute the local identifier (local ID).

For any Repository object, the local identifier is the same for the internal identifier and the object identifier. That is, each Repository object has exactly one 4-byte local identifier.

There is a one-to-one correspondence between an object's site identifier and its GUID, and each Repository database includes a table (RTblSites) that maintains this correspondence. Each row of the table associates one GUID with one site identifier.

Repository uses the one-to-one correspondence between the site identifiers and GUIDs to conserve space in the Repository database. When the Repository engine stores a Repository object, it stores the internal identifier with the object. The engine does not store the GUID or the object identifier with the Repository object. When you need the object identifier of an object, the Repository engine constructs the object identifier by reading the internal identifier stored with the object, matching the site identifier to the appropriate row of the RTblSites table, and reading the GUID from that row.