LiquidThreads 3.0/Object model

This is the home page for the LiquidThreads object model. It contains information about how LiquidThreads stores its data. At this point, its contents are restricted to the core "discussion system" functionality of LiquidThreads, without other planned modules such as the central event handling, message queuing and notification subsystems required by the subscriptions interface.

Discussion System
There are three main objects in LiquidThreads. They are, in descending order of size, Channels, Topics and Posts.

A Channel represents a discussion page, and provides an immutable binding to a specific page that survives both page deletions and page moves. It insulates Topics from the fact that both article IDs and article titles can change within the same logical discussion page (article IDs through page deletion, and article titles through page moves.

A Topic represents a section on a discussion page. It has a subject and an editable summary, and is associated with a specific Channel.

A Post is a single comment within a Topic. It is contained in a specific Topic, but additionally may be the child of another Post within the same topic (for threaded discussions). Posts maintain versioned signatures, comment text, and other metadata.

Versioning
Version control is implemented in a system inspired by MediaWiki Core's page and revision tables. Topics and Posts are "versioned objects". All data associated with a Topic or Post is actually stored in a TopicVersion or PostVersion object. In addition to the versioned data, each version object also stores the editor responsible for the change in question, any comment that they might have made about the change, and the timestamp that the version was created. A Version object is immutable, except that it also stores a "visibility" attribute that allows moderators to hide offensive, libelous or illegal content.