Clio TablesΒΆ

The first step to integrate a database with Clio is to use tables that have the special Clio columns. We will call this kind of table a Clio table. All tables in the database should be Clio tables. The only exception to this are pivot (or secondary) tables used to define a many to many relation between two other tables. These tables should be normal non-Clio tables.

A Clio table is a table that has a notion of workflow versions. Multiple versions of the same abstract object (published, editable, archived) can exist in this table at the same time as different versions of this object undergoing a workflow. Each version is represented by a record.

Note that Clio does not (yet) support the SQLAlchemy declarative extension that allows one to define ORM-mapped class and table columns in step. At this point, Clio only supports the explicit mechanisms where tables and ORM-mapped classes are defined in separate steps.

A Clio table defines the following special columns:

id
An auto-incrementing id column. This uniquely identifies the record in the table. If multiple workflow versions of the same record exist, they each will have a unique id. The id column is used in foreign key relationships that may be created to this table.
code

Another identifying column. All workflow versions of the record will have the same code. It can therefore be used to find out all versions of a record in a query. The code can also be used to refer to this record externally, from outside the database.

The database does not supply the code automatically; the developer must supply a unique code when the record is first created and is therefore new to the workflow system. When using the ORM this is typically when the ORM-mapped object is first created.

status
The workflow status that the record is in. Clio manages this column automatically. It can also be used in queries. The status is a symbolic value encoded as an integer number. Clio defines the meaning of these numbers.
workflow_timestamp
The timestamp (date and time) of the last workflow event that happened to this record. A workflow event includes publication or being archived. Clio automatically manages this column.
creation_timestamp
The timestamp (date and time) of the creation time of this record. Clio automatically manages this column.

In addition to the special columns, Clio tables also have a uniqueness constraint: there never may be two records which have the same code and the same status.

Clio offers a convenience clio.Table constructor which allows you to construct tables with these columns and the constraint already available. Use clio.Table just like you would use sqlalchemy.Table:

import clio

address_table = clio.Table(
  'address', metadata,
  Column('street', Unicode(50), nullable=False),
  Column('city', Unicode(50), nullable=False),
  Column('country', Unicode(50), nullable=False))

The address_table table will now automatically gain the columns described above (id, code, status, etc).

Previous topic

Introduction

Next topic

Clio Models

This Page