Page database structure

The Xperience database stores pages (nodes in the content tree of websites) in several interconnected tables:

Database table

Description

CMS_Tree

Stores:

  • Data that determines the position of pages in the website content tree
  • Basic page properties that are shared between all language versions of the same page

Contains only one record for each page, regardless of the number of language versions. The table does not store any versioned data.

CMS_Document

Stores:

May contain multiple records per page, one for each language version. Some of the page columns are versioned.

Coupled data tables

Stores the fields of individual page types.

For example, an Article page type could have a coupled table named DancingGoat_Article with columns defined for article pages, such as ArticleTitle, ArticleSummary, ArticleText.

  • Records in the coupled data tables are bound to pages through the DocumentForeignKeyValue column of the CMS_Document table.
  • The page type of tree nodes is determined by the NodeClassID column in the CMS_Tree table.
  • Page types without fields, such as Folder, do not have a coupled table.
  • Every language version of a page has its own record in the corresponding coupled data table.
  • All columns in coupled data tables are versioned.

The relationships between page database tables

Page attachments and versions

Database table

Description

CMS_Attachment

Stores files uploaded to the database as page attachments.

Includes all types of page attachments:

  • Unsorted attachments added on the Properties -> Attachments tab in the Pages application. Such attachments are linked to the related page by storing its identifier (AttachmentDocumentID column).

  • Attachments uploaded through specific page fields (of either the File or Attachments data type) on the Content tab in the Pages application. Such fields are represented by columns in the given page type’s coupled data table.

    • Page type fields of the File data type store a GUID value, which identifies the corresponding attachment in the CMS_Attachment table.
    • For fields of the Attachments data type, the value in the database is always empty. Instead, the given records in the CMS_Attachment table store an identifier of the related page (AttachmentDocumentID column) and a GUID value that identifies the specific field in the page type’s form definition (AttachmentGroupGUID column).

CMS_VersionHistory

Stores page versions, including older versions and versions that are being edited. When a version is published, the system updates the corresponding records in the CMS_Tree and CMS_Document tables using the data of the version record.

CMS_AttachmentHistory

Stores attachments of page versions. The main purpose of this table is to avoid redundancy for page versions that use the same attachments.

When a page version is published, the system updates the records in the CMS_Attachment table using the data of the version record.

CMS_VersionAttachment

Stores relationships between page versions and their page attachments.

Database diagram of all page tables

Products

Products represent merchandise or services in online stores. The system associates product objects (SKUs) with pages representing product types.

The primary product data is stored in the COM_SKU database table.

  • Pages representing products are bound to the related SKU through the NodeSKUID column of the CMS_Tree table.
  • Most product columns are versioned and covered by workflow (exceptions include the product image, as well as the Track inventory and Available items properties).
  • If a product page is available in multiple language versions AND covered by workflow, the versioned product properties are NOT shared between different language versions of a single product. Any updates of the product Price (or other key properties) need to be made separately for each language version.

Page relationships

Database table

Description

CMS_Relationship

Stores records representing relationships between two pages. Used for both:

CMS_RelationshipName

Stores the relationship names (types) defined in the system.

CMS_RelationshipNameSite

Binding table that connects relationship names to websites. Each entry indicates that a relationship can be used on a given site.

Database diagram of page relationship tables