Le catalogue SQL de 4D comporte plusieurs tables système, accessible à tout utilisateur SQL disposant des droits d’accès en lecture : _USER_TABLES, _USER_COLUMNS, _USER_INDEXES, _USER_CONSTRAINTS, _USER_IND_ COLUMNS, _USER _CONS_ COLUMNS, _USER_SCHEMAS, _USER_VIEWS et _USER_VIEW_COLUMNS.
Conformément aux usages dans le monde SQL, les tables système décrivent la structure de la base de données. Voici le descriptif de ces tables et de leurs champs :
| _USER_TABLES | | Décrit les tables utilisateurs de la base |
| TABLE_NAME | VARCHAR | Nom de table |
| TEMPORARY | BOOLEAN | Vrai si la table est temporaire, faux sinon |
| TABLE_ID | INT64 | Numéro de table |
| SCHEMA_ID | INT32 | Numéro de schéma |
| REST_AVAILABLE | BOOLEAN | Vrai si la table est exposée avec le service REST, Faux sinon |
| LOGGED | BOOLEAN | Vrai si les opérations de la table sont incluses dans le fichier d'historique, Faux sinon |
| _USER_COLUMNS | | Décrit les colonnes des tables utilisateurs de la base |
| TABLE_NAME | VARCHAR | Nom de table |
| COLUMN_NAME | VARCHAR | Nom de colonne |
| DATA_TYPE | INT32 | Type de colonne |
| DATA_LENGTH | INT32 | Longueur de colonne |
| NULLABLE | BOOLEAN | Vrai si la colonne accepte des valeurs NULL, faux sinon |
| TABLE_ID | INT64 | Numéro de table |
| COLUMN_ID | INT64 | Numéro de colonne |
| UNIQUENESS | BOOLEAN | Vrai si la colonne est déclarée Unique, Faux sinon |
| AUTOGENERATE | BOOLEAN | Vrai si la valeur de la colonne est automatiquement générée pour chaque nouvel enregistrement, Faux sinon |
| AUTOINCREMENT | BOOLEAN | Vrai si la valeur de la colonne est automatiquement incrémentée, Faux sinon |
| REST_AVAILABLE | BOOLEAN | Vrai si la colonne est exposée avec le service REST, Faux sinon |
| _USER_INDEXES | | Décrit les index utilisateurs de la base |
| INDEX_ID | VARCHAR | Numéro d’index |
| INDEX_NAME | VARCHAR | Nom d’index |
| INDEX_TYPE | INT32 | Type d’index (1=BTree / Composite, 3=Cluster / Mots-clés, 7=Auto, 8=Auto pour champ Objet) |
| KEYWORD | BOOLEAN | Vrai si l'index est un index de mots-clés, faux sinon |
| TABLE_NAME | VARCHAR | Nom de table avec index |
| UNIQUENESS | BOOLEAN | Vrai si l’index impose une contrainte d’unicité, faux sinon |
| TABLE_ID | INT64 | Numéro de table avec index |
| _USER_IND_COLUMNS | | Décrit les colonnes des index utilisateurs de la base |
| INDEX_ID | VARCHAR | Numéro d’index |
| INDEX_NAME | VARCHAR | Nom d’index |
| TABLE_NAME | VARCHAR | Nom de table avec index |
| COLUMN_NAME | VARCHAR | Nom de colonne avec index |
| COLUMN_POSITION | INT32 | Position de colonne dans l’index |
| TABLE_ID | INT64 | Numéro de table avec index |
| COLUMN_ID | INT64 | Numéro de colonne |
| _USER_CONSTRAINTS | | Décrit les contraintes d'intégrité de la base |
| CONSTRAINT_ID | VARCHAR | Numéro de contrainte |
| CONSTRAINT_NAME | VARCHAR | Nom de la définition de contrainte |
| CONSTRAINT_TYPE | VARCHAR | Type de contrainte (P=clé primaire, R=intégrité référentielle - clé étrangère, 4DR=relation 4D) |
| TABLE_NAME | VARCHAR | Nom de table avec contrainte |
| TABLE_ID | INT64 | Numéro de table avec contrainte |
| DELETE_RULE | VARCHAR | Règle de suppression de la contrainte – CASCADE ou RESTRICT |
| RELATED_TABLE_NAME | VARCHAR | Nom de table liée |
| RELATED_TABLE_ID | INT64 | Numéro de table liée |
| _USER_CONS_COLUMNS | | Décrit les colonnes des contraintes utilisateurs de la base |
| CONSTRAINT_ID | VARCHAR | Numéro de contrainte |
| CONSTRAINT_NAME | VARCHAR | Nom de contrainte |
| TABLE_NAME | VARCHAR | Nom de table avec contrainte |
| TABLE_ID | INT64 | Numéro de table avec contrainte |
| COLUMN_NAME | VARCHAR | Nom de colonne avec contrainte |
| COLUMN_ID | INT64 | Numéro de colonne avec contrainte |
| COLUMN_POSITION | INT32 | Position de colonne dans une contrainte |
| RELATED_COLUMN_NAME | VARCHAR | Nom de colonne liée dans une contrainte |
| RELATED_COLUMN_ID | INT32 | Numéro de colonne liée dans une contrainte |
| _USER_SCHEMAS | | Décrit les schémas de la base |
| SCHEMA_ID | INT32 | Numéro de schéma |
| SCHEMA_NAME | VARCHAR | Nom de schéma |
| READ_GROUP_ID | INT32 | Numéro du groupe ayant accès en lecture |
| READ_GROUP_NAME | VARCHAR | Nom du groupe ayant accès en lecture |
| READ_WRITE_GROUP_ID | INT32 | Numéro du groupe ayant accès en lecture-écriture |
| READ_WRITE_GROUP_NAME | VARCHAR | Nom du groupe ayant accès en lecture-écriture |
| ALL_GROUP_ID | INT32 | Numéro du groupe ayant un accès complet |
| ALL_GROUP_NAME | VARCHAR | Nom du groupe ayant un accès complet |
| _USER_VIEWS | | Décrit les vues des utilisateurs de la base |
| VIEW_NAME | VARCHAR | Nom de vue |
| SCHEMA_ID | INT32 | ID du nom_schéma auquel appartient la vue |
| _USER_VIEW_COLUMNS | | Décrit les colonnes des vues des utilisateurs de la base |
| VIEW_NAME | VARCHAR | Nom de vue |
| COLUMN_NAME | VARCHAR | Nom de colonne |
| DATA_TYPE | INT32 | Type de colonne |
| DATA_LENGTH | INT32 | Taille de colonne |
| NULLABLE | BOOLEAN | True si la colonne accepte des valeurs NULL, sinon False |
Note : Les tables système sont affectées à un schéma particulier nommé SYSTEM_SCHEMA. Ce schéma ne peut être ni modifié ni supprimé. Il n’apparaît pas dans la liste des schémas affichée dans l’Inspecteur de tables. Il est accessible en mode Lecture seulement à tout utilisateur.