Data Model

Last Updated: Aug 14, 2019
documentation for the dotCMS Content Management System

The dotCMS tables are designed to both ensure referential integrity and help prevent issues with orphan assets, while also making it easy to access common information about each asset. This document explains the design and purpose of some of the most important tables.

1. Identifier Table

 id character varying(36) NOT NULL,
 parent_path character varying(255),
 asset_name character varying(255),
 host_inode character varying(36),
 asset_type character varying(64),


  • The URI for each asset is not stored as a database field.
    • Instead the parent_path and asset_name fields together compose the unique uri for every asset in the system.
  • Assets and their identifiers are related directly through the asset record in the contentlet, containers, templates, or htmlpage table.
    • The relationship is not saved in the inode or tree table.

2. Folder Table

 inode character varying(36) NOT NULL,
 name character varying(255),
 title character varying(255) NOT NULL,
 show_on_menu boolean,
 sort_order integer,
 files_masks character varying(255),
 identifier character varying(36),
 default_file_type character varying(36),


  • The path to the folder is stored in the Identifier Table rather than the Folder table.
    • So you can find the folder's path through the identifier field in the Folder Table.
  • The default_file_type_character stores the inode of the file Content Type that is used as the default when uploading files to the folder through webdav.

3. Version Info Tables

All versioning information is stored in the following tables:

  • contentlet_version_info
  • container_version_info
  • htmlpage_version_info

Each of these tables has the following fields:

 identifier character varying(36) NOT NULL,
 lang bigint NOT NULL,
 working_inode character varying(36) NOT NULL,
 live_inode character varying(36),
 deleted boolean NOT NULL,
 locked_by character varying(100),
 locked_on timestamp without time zone,


  • These tables contain one record for each identifier, giving access to the inodes of the working and live versions of the asset and locking information.

4. Webassets Table

The Webassets Table contains the following fields (note that the text fields have been omitted here for brevity):

 inode character varying(36) NOT NULL,
 show_on_menu boolean,
 title character varying(255),
 mod_date timestamp without time zone,
 mod_user character varying(100),
 sort_order integer,
 friendly_name character varying(255),
 structure_inode character varying(36),
 last_review timestamp without time zone,
 next_review timestamp without time zone,
 review_interval character varying(255),
 disabled_wysiwyg character varying(255),
 identifier character varying(36),
 language_id bigint,


  • The working, live, deleted and locked fields for each asset are in the version_info table for each asset type..

5. Content Relationships

The content relationships and category relationships are saved using the tree table and the content’s inode.

6. Indicies Table

This table stores the names of the active working and live indexes.

Table Definition:

 index_name character varying(30) NOT NULL,
 index_type character varying(16) NOT NULL,

On this page


We Dig Feedback

Selected excerpt: