# POEM Internals

### The metadata tables

This section describes in detail the structure of the metadata tables `tableinfo` and `columninfo` as an aid to the understanding POEM's (and the admin system's) workings, and for the benefit of anyone undertaking repair work on a damaged database. For a discussion of their function and relationship with the DSD and the JDBC metadata, see the user guide.

#### `tableinfo`

The `tableinfo` table describes the properties of each table in the database (including itself). It comprises the following columns:

`id` |  | Like every other record in a POEM database, each `tableinfo` has to have a troid (table row ID, or table-unique non-nullable integer primary key); and like the troids of other POEM special tables, this one is called `id`. It is not related to the order in which the tables appear in the database, or to anything else: it's just a convenient arbitrary identifier for the table.
`name` |  | The programmatic name of the table, identical with its name in the DSD (if the table was defined there) and in the RDBMS itself. You can't change this through the normal POEM channels, and if you do change it your application will at best fail to start next time. So don't do that.
`displayname` |  | The descriptive name of the table. POEM itself doesn't use this, but it's available to applications and Melati's generic admin system as a default label for the table and caption for its records.
`displayorder` |  | An integer defining where the table should appear in lists of all tables in the database (used by Melati's generic admin system).
`defaultcanread` |  | ...