Page database structure

The Kentico database stores pages (nodes in the content tree of websites) in several joined 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 doesn’t 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
(CONTENT_<doc type>)

Stores the fields of individual page types.

For example, the News page type has the CONTENT_News coupled table with the columns defined for news pages, such as NewsTitle, NewsSummary, NewsText.

  • 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.
  • Container page types, 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.

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

Page relationships

Database table

Description

CMS_Relationship

Stores records representing relationships between two pages.

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