Database schema
Disclaimer
Direct SQL access is not supported
Accessing the database directly is neither supported nor covered by our agreement, because:
Any upgrade may require that you change the way to extract data,
You may extract wrong data,
SQL is hard and you may make mistakes that erase or corrupt data.
Please perform a backup of your data before editing.
Understanding the basics of our schema model
See also: Database schema for Confluence backups, Database schema for Jira backups
Table prefix
Prefix in Confluence: AO_32F7CE
Prefix in Jira: AO_42D05A
Prefix for PSEA in Confluence: AO_B895AB
All our tables are stored with the prefix “AO_32F7CE” corresponding to the plugin key in md5.
Columns are uppercase (and may require quotes)
Most databases assume that table names are lowercase, even when you type SELECT SPACEKEY, KEY, BASELINE FROM AO_32F7CE_DBREQUIREMENT.
So you have to put double-quotes ("), or backticks in weird databases (`) : SELECT "SPACEKEY", "KEY", "BASELINE" FROM "AO_32F7CE_DBREQUIREMENT".
Our unique keys are SPACEKEY - KEY - BASELINE (3 required items)
Despite a technical ID available in all tables, which is a Long, we almost always use the 3 values above to reference requirements. Don’t omit to include all 3 parameters, even if the baseline is often null!
Example: Table AO_32F7CE_DBREQUIREMENT
ID: Technical primary key
SPACEKEY*: The space key
KEY*: The key of the requirement
BASELINE*: The baseline (for ARCHIVED requirements only), or null (for ACTIVE only).
STATUS: ACTIVE, ARCHIVED, MOVED, DELETED.
*Primary key
In Jira, the primary key has 4 identifiers, by necessity of being a remote app: APPLINKID, SPACEKEY, KEY, BASELINE.
Confluence database schema
AO_32F7CE_DBREQUIREMENT
Primary key: SPACEKEY, KEY, BASELINE,
STATUS: One of { ACTIVE, ARCHIVED, MOVED, DELETED },
STORAGETYPE, HTMLEXCERPT: The storage type indicates the indexing engine. 1 or null means LEGACY_JS, 2 means it’s the 2023 engine, 3 means XHTML (not rendered yet), 4 means it’s pure text. The HTMLEXCERPT is the description of the requirement.
NEWKEY, NEWSPACEKEY: If the status is MOVED, then this contains the target.
UPPERKEY: Predefined field for case-insensitive searches.
AO_32F7CE_DBPROPERTY:
TYPE can be INLINE (belongs to the requirement, since it’s the page) or EXTERNAL (losely associated IDs).
AO_32F7CE_DBDEPENDENCY
Primary key: RELATIONSHIP, PARENT_ID, CHILD_ID
AO_32F7CE_DBLINK
PARENT_ID: ID of the DBREQUIREMENT,
If ORIGIN=true, this is the page where the requirement was created,
If ORIGIN=false, this is a page that cites the requirement, or a Jira issue that cites it, since it depends on the type.
The primary key for this table is … almost all columns, since metadata varies per type of link.
AO_32F7CE_DBTRACEABILITYMATRIX
The list of saved traceability matrices,
Primary key: SPACEKEY, ORIGINALID
AO_32F7CE_DBQUEUE:
The queue (messages to Jira, indexation jobs or background jobs),
AO_32F7CE_DBBACKUPITEM and AO_32F7CE_DBBACKUPMAPPING:
Those are used as temporary storage tables when you export requirements to another instance of Confluence.
AO_32F7CE_DBAPPLINK:
Descriptor of Jira apps registered in Confluence, and opposite.
Jira database schema
In Jira, there are 4 identifiers for requirements, since we add the APPLINKID.
All our tables are stored with the prefix “AO_42D05A” in Jira.
AO_42D05A_DBREMOTEREQUIREMENT:
The list of requirements.
Identified by APPLINKID, SPACEKEY, KEY, BASELINE,
FLAGDELETED: Boolean, the requirement is not shown if true.
AO_42D05A_DBISSUELINK
ISSUEID: The primary identifier of issues
ISSUEKEY: Text only, FYI and not necessarily up to date (e.g. if the issue was moved),
RELATIONSHIP: A free verb to characterize the link to Confluence,
REQUIREMENT_ID: The ID of the table AO_42D05A_DBREMOTEREQUIREMENT.
AO_42D05A_DBAUDITTRAIL:
A sequential list of changes on issue links,
They are serialized and stored in the JSON column,
This table is regularly purged depending on the options chosen in the administration.
AO_42D05A_DBQUEUE: Queue messages
AO_42D05A_DBBACKUPITEM: Import/export feature
AO_42D05A_DBBACKUPMAPPING: Import/export feature
AO_42D05A_DBAPPLINK: Configuration details of this applink
Generic metadata
A lot of tables have the following fields:
SCHEMAVERSION: An number corresponding to our
ModelVersion
, always ascending. Whenever we upgrade records to a new format, we update this field, so that we don’t work on the same entities twice. Not all records will have the latest SCHEMAVERSION, because upgrade tasks can ignore subsets of records depending on various criteria.ID: Will be of type Long (64 bits) for all our modern entities, which start with “DB” (“DBREQUIREMENT”). Our old entities didn’t start with “DB” and only had shorter Integer (32 bits) identifiers, which was too short.
CREATEDUSER, LASTUPDATEDUSER: The userKey of the last person who created/updated the entity.
CREATEDDATE, LASTUPDATEDDATE: The date of creation and edition.