Feb 18, 2011
  9788
(0 votes)

The EPiServer Pages and Properties From the Database Point Of View.

The database diagram describing relations between EPiServer pages and their properties is given below.image

As you can see the tables tblPage and tblWorkPage are connected with “one – to - many ” relation. The main record about the page is stored in tblPage and the page  versions records are saved in the tblWorkPage. The query getting all the versions for the page with id = 49 looks this way:

select * from tblPage p
join tblPageType pt on p.fkPageTypeID = pt.pkID
join tblWorkPage wp on wp.fkPageID = p.pkID
where p.pkID = 49

When you create new page new record is added to the tblPage table. Everytime you publish  new version of the page the correspondent record is inserted into the tblWorkPage. Information about the page current version is stored in tblPageLanguage.PublishedVersion field which can  contain one of the tblWorkPage.pkID values.

Evidently, if you need to get the properties values for the given page version ( f.e.130)  you should execute

select * from tblWorkProperty where fkWorkPageID = 130,

where fkWorkPageID is a foreign key to tblWorkPage. So in much the same way the tblWorkProperty table keeps the history of properties values and tblProperty contains just a single record about given property – the value when created.

Feb 18, 2011

Comments

senthil Kumar
senthil Kumar Dec 20, 2011 05:48 PM

Hi Yugeen, Thanks a lot, very useful information for a beginner like me.

Oct 21, 2014 09:54 AM

Hi,
If I want to change a parent of a particular page from node1 to node2, which tables shall I look at?
Right now I have used the query below
update tblpage
set fkparentid = [new parent id]
where pkid = [id of the page]
This does change the node, but when I use the GetParents, it still points to the old node


Thanks.

Sofia 'Sonya'
Sofia 'Sonya' Feb 26, 2020 07:54 PM

Thank you, Yugeen! This has been very helpul.

I noticed that in Episerver version 10.10,  tblPage, as well as other tables you mentioned, are actually a Views in a database.

Thanks

Sonya 

Please login to comment.
Latest blogs
AEO/GEO: A practical guide

Search changed. People ask AI tools. AI answers. Your content must be understandable, citable, and accessible to both humans and machines. That’s...

Naveed Ul-Haq | Feb 17, 2026 |

We Cloned Our Best Analyst with AI: How Our Opal Hackathon Grand Prize Winner is Changing Experimentation

Every experimentation team knows the feeling. You have a backlog of experiment ideas, but progress is bottlenecked by one critical team member, the...

Polly Walton | Feb 16, 2026

Architecting AI in Optimizely CMS: When to Use Opal vs Custom Integration

AI is rapidly becoming a core capability in modern digital experience platforms. As developers working with Optimizely CMS 12 (.NET Core), the real...

Keshav Dave | Feb 15, 2026

Reducing Web Experimentation MAU Using the REST API

Overview Optimizely Web Experimentation counts an MAU based upon the script snippet rendering for evauluation of web experiement. Therefore when yo...

Scott Reed | Feb 13, 2026

Install the new AI Assistant Chat for Optimizely

AI Assistant Chat is a revolutionary feature introduced in version 3.0 of Epicweb.Optimizely.AIAssistant that brings conversational AI directly int...

Luc Gosso (MVP) | Feb 12, 2026 |

Building a TwoColumnWideLeftSection in Optimizely CMS 13 Visual Builder

This post walks through a practical “66% / 33%” section built for Visual Builder using the composition tag helpers: , , , and . Visual Builder is...

Francisco Quintanilla | Feb 12, 2026 |