# GBDS 4 Relational Database

## Introduction

This manual describes all tables, schemas, and information from the relational databases of GBDS 4.x. GBDS uses a relational database to store metadata about people, transactions, notification groups, configuration substitutions, and exceptions.

The document is divided into four sections that describe:

* The general tables;
* The Unresolved Latent (UL) tables;
* The Notification tables;
* The GBDS configuration tables.

## General tables <a href="#general-tables" id="general-tables"></a>

The general tables are tables that store vital information for the operation of GBDS, such as exceptions, information about people, information about transactions, and others. These tables are described below.

### gbds.people

The `people`table is intended to store the indexes of all people stored in the GBDS database and is described as follows:

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key;<br><br>Private key of the relational database</td></tr><tr><td>pguid</td><td>varchar</td><td>255</td><td>not null</td><td>Personal UGUID stored in HBase</td></tr><tr><td>deleted</td><td>tinyint</td><td>1</td><td>null</td><td>Indicates whether the candidate was deleted, so that they are not included when listing operations are performed</td></tr></tbody></table>

### gbds.people\_version

The `people_version`table is intended to store information about the latest changes to a person's registration and is described as follows:

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="116.6666259765625">Size</th><th width="100">Value</th><th>Additional information</th></tr></thead><tbody><tr><td>version</td><td>int</td><td>11</td><td>not null</td><td>Primary key; Version index (incremental from the first change)</td></tr><tr><td>person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Reference to the person<code>gbds.people.id</code></td></tr><tr><td>_timestamp</td><td>datetime</td><td>6</td><td>null</td><td>date and time timestamp for the current version of a person</td></tr><tr><td>deleted</td><td>tinyint</td><td>1</td><td>null</td><td>Indicates whether the candidate was deleted to be executed when performing candidate listing operations</td></tr><tr><td>active</td><td>tinyint</td><td>1</td><td>null</td><td>Defines whether a version of a person is eligible for master record transactions</td></tr></tbody></table>

### gbds.transactions\_ref

The `transactions`table is intended to store the indexes of all transactions stored in the GBDS database and is described as follows:

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Private key of the relational database</td></tr><tr><td>tguid</td><td>varchar</td><td>255</td><td>not null</td><td><p>UGUID of the transaction stored in HBase</p><h4 id="gbds.transactions"><br></h4></td></tr></tbody></table>

### gbds.transactions

The `transactions`table is intended to store information about the quality analysis of the biometric data of a transaction.

<table><thead><tr><th width="200">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Private key of the relational database</td></tr><tr><td>tguid</td><td>varchar</td><td>255</td><td>not null</td><td>Reference to the transaction<code>transactions_ref.tguid</code></td></tr><tr><td>pguid</td><td>varchar</td><td>255</td><td>null</td><td>UGUID of the person stored in HBase</td></tr><tr><td>active</td><td>tinyint</td><td>1</td><td>not null</td><td>Defines whether a version of a person is eligible for master record transactions</td></tr><tr><td>finger_quality_extracted</td><td>tinyint</td><td>1</td><td>null</td><td>False if fingerprints can be extracted</td></tr><tr><td>face_quality_extracted</td><td>tinyint</td><td>1</td><td>null</td><td>False if the face can be extracted in the background. True if it has already been extracted.</td></tr><tr><td>created</td><td>datetime</td><td>6</td><td>null</td><td>date and time timestamp of the transaction creation</td></tr><tr><td>updated</td><td>datetime</td><td>6</td><td>null</td><td>date and time timestamp of the last transaction modification</td></tr><tr><td>enroll_status</td><td>varchar</td><td>255</td><td>null</td><td>Enrollment status (such as <code>ENQUEUED</code>, <code>PROCESSING</code>, <code>FAILED</code>, and others)</td></tr><tr><td>quality_status</td><td>varchar</td><td>255</td><td>null</td><td>Quality analysis status (such as <code>OK</code>, <code>PENDING</code>, <code>APPROVED</code>, and others)</td></tr><tr><td>extraction_time</td><td>varchar</td><td>255</td><td>null</td><td>Elapsed time for template extractions</td></tr><tr><td>extraction_quality</td><td>varchar</td><td>255</td><td>null</td><td>Elapsed time for quality extractions</td></tr><tr><td>match_time</td><td>int</td><td>11</td><td>null</td><td>Elapsed matching time for this transaction</td></tr><tr><td>total_time</td><td>int</td><td>11</td><td>null</td><td>Total operation minus queue waiting time</td></tr><tr><td>type</td><td>varchar</td><td>20</td><td>null</td><td>Transaction type. Enum: <code>ENROLL</code>, <code>UPDATE</code>, <code>VERIFY</code>,<code>IDENTIFY</code></td></tr><tr><td>fingerprint_global_quality</td><td>int</td><td>11</td><td>null</td><td>Global fingerprint quality score</td></tr><tr><td>global_quality</td><td>int</td><td>11</td><td>null</td><td>Global profile quality score</td></tr><tr><td>quality_extraction_api_id</td><td>varchar</td><td>255</td><td>null</td><td>ID of the API that will perform or performed the quality extraction</td></tr><tr><td>latent</td><td>tinyint</td><td>1</td><td>null</td><td>Flags whether the transaction is a latent search</td></tr><tr><td>ul</td><td>tinyint</td><td>1</td><td>null</td><td>Flags whether the transaction is a UL search</td></tr><tr><td>api_id</td><td>varchar</td><td>255</td><td>null</td><td>The instance ID of the API that received the transaction</td></tr><tr><td>num_fingers</td><td>int</td><td>11</td><td>null</td><td>The number of fingerprints in the transaction</td></tr><tr><td>num_faces</td><td>int</td><td>11</td><td>null</td><td>The number of face images in the transaction (0 or 1)</td></tr><tr><td>gbds_version</td><td>varchar</td><td>255</td><td>not null</td><td>GBDS version that processed the transaction</td></tr><tr><td>ginger_extractor_type</td><td>enum</td><td>n/a</td><td>null</td><td>Type of ginger extractor used in the transaction. Enum: <code>GRIAULE_FAST</code>, <code>GRIAULE_BASIC</code>, <code>GRIAULE_2020</code>, <code>GRIAULE_2024</code>, <code>GRIAULE_2018</code>.</td></tr></tbody></table>

### gbds.transaction\_fields

The `transaction_fields`table is intended to store information about quality information and link it to the non-biometric information of the `fields`table.

<table><thead><tr><th width="120">Column</th><th width="100">Type</th><th width="100"> Size</th><th width="100">Value</th><th>Additional information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Private key of the relational database</td></tr><tr><td>fkey</td><td>varchar</td><td>255</td><td>null</td><td>Field key that describes the information contained (for example, whether it is a blood type, mother's name, date of birth, document, etc.) Reference to<code>fields.fkey</code></td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Type of information (search or <code>label</code>) Reference to<code>fields.type</code></td></tr><tr><td>fvalue</td><td>varchar</td><td>255</td><td>null</td><td>Actual field value (for example, the document number) Reference to<code>fields.fvalue</code></td></tr><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td><td>Transaction ID. Reference to<code>transaction.id</code></td></tr></tbody></table>

### gbds.transaction\_fingerprint\_quality

The columns of the table below are dynamic, according to the quality extraction. If any editing of the fields occurs in future versions, the data here may be outdated for a while.

| Column            | Type    | Size | Value    |
| ----------------- | ------- | ---- | -------- |
| transaction\_id   | bigint  | 20   | not null |
| idx               | int     | 11   | not null |
| image\_quality    | int     | 11   | null     |
| template\_quality | int     | 11   | null     |
| minutiae\_count   | int     | 11   | null     |
| blank             | varchar | 100  | null     |
| contrast          | varchar | 100  | null     |
| fingerArea        | varchar | 100  | null     |
| fingerCenterX     | varchar | 100  | null     |
| fingerCenterY     | varchar | 100  | null     |
| fingerExtentX     | varchar | 100  | null     |
| fingerExtentY     | varchar | 100  | null     |
| hasjoint          | varchar | 100  | null     |
| \_\_index         | varchar | 100  | null     |
| marginBiteEast    | varchar | 100  | null     |
| marginBiteNorth   | varchar | 100  | null     |
| marginBiteSouth   | varchar | 100  | null     |
| marginBiteWest    | varchar | 100  | null     |
| nfiq              | varchar | 100  | null     |
| orientation       | varchar | 100  | null     |
| sizeX             | varchar | 100  | null     |
| sizeY             | varchar | 100  | null     |

### gbds.transaction\_face\_quality

The columns of the table below are dynamic, according to the quality extraction. If any editing of the fields occurs in future versions, the data here may be outdated for a while.

<table><thead><tr><th width="300">Column</th><th>Type</th><th>Size</th><th>Value</th></tr></thead><tbody><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td></tr><tr><td>idx</td><td>int</td><td>11</td><td>not null</td></tr><tr><td>image_quality</td><td>int</td><td>11</td><td>null</td></tr><tr><td>template_quality</td><td>int</td><td>11</td><td>null</td></tr><tr><td>autoBrightness</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgBelowPictureQuality</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgBlueStandardDeviation</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgDarknessQuality</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgGreenStandardDeviation</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgRedStandardDeviation</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgUniformityQuality</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>blurCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>busyBackground</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>busyBackgroundInCropped</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>cropContainmentError</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookDown</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookLeft</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookRight</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookUp</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesObstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesTooClosed</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesTooOpen</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceDown</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceLeft</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceObstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceOrientationPitchCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceOrientationRollAngle</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceOrientationYawCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceRight</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceUp</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>glasses</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>grayscaleSpan</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>hat</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>heavyGlasses</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>icaoCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>leftEyeX</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>leftEyeY</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>mouthObstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>mouthOpen</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>obstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>openMouth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>pictureHeight</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>pictureWidth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>pixelated</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>redEye</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>result</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>rightEyeX</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>rightEyeY</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturated</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturationGrayscaleDistribGrade</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturationNumGrayTones</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturationOverExposure</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>shadows</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>skinColorCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>smile</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>smilingMouth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>spoof</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>spoofGrade</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>tiltAngle</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>tooDark</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>unnaturalSkinColor</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>visibleTeeth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>wrongFacePose</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>wrongShoulderPoseLeft</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>wrongShoulderPoseRight</td><td>varchar</td><td>100</td><td>null</td></tr></tbody></table>

### gbds.biometrics

The `biometrics`table is intended to store a person's biometric data, being linked to the `transaction`and `people_version`system tables. It is described as follows:

<table><thead><tr><th width="120">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Private key of the relational database</td></tr><tr><td>idx</td><td>int</td><td>11</td><td>null</td><td>Current biometric index</td></tr><tr><td>quality</td><td>int</td><td>11</td><td>null</td><td>Quality score for the extracted biometric template</td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Current biometric modality</td></tr><tr><td>person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Reference to the person<code>gbds.people.id</code></td></tr><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td><td>Reference to the transaction<code>transactions_ref.id</code></td></tr><tr><td>person_version</td><td>bigint</td><td>11</td><td>not null</td><td>Reference to the person<code>people_version.version</code></td></tr></tbody></table>

### gbds.fields

The `fields`       is intended to store the non-biometric information of a person, being linked to the `transaction`tables `people_version`. It is described as follows:

<table><thead><tr><th width="120">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Private key of the relational database</td></tr><tr><td>fkey</td><td>varchar</td><td>255</td><td>null</td><td>Field key that describes the information contained (for example, whether it is a blood type, mother's name, date of birth, document, etc.)</td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Type of information (search or <code>label</code>)</td></tr><tr><td>fvalue</td><td>varchar</td><td>255</td><td>null</td><td>Actual field value (for example, the document number)</td></tr><tr><td>person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Reference to the person<code>person.id</code></td></tr><tr><td>person_version</td><td>int</td><td>11</td><td>not null</td><td>Reference to the person<code>people_version.version</code></td></tr></tbody></table>

### gbds.exceptions

The `exceptions`is intended to store the information of any biometric exception and its handling. It is described below:

<table><thead><tr><th width="185">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Private key of the relational database</td></tr><tr><td>aguid</td><td>varchar</td><td>255</td><td>not null</td><td>Exception stored HBase UGUID</td></tr><tr><td>comments</td><td>varchar</td><td>255</td><td>null</td><td>Any comments provided when handling the exception</td></tr><tr><td>_timestamp</td><td>datetime</td><td>6</td><td>null</td><td>date and time timestamp for the exception creation</td></tr><tr><td>status</td><td>varchar</td><td>255</td><td>not null</td><td>The current status of the exception is defined by whether it is handled or pending</td></tr><tr><td>user</td><td>varchar</td><td>255</td><td>null</td><td>Identification of the user responsible for handling the exception</td></tr><tr><td>reference_person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Foreign key: Reference to the reference person<code>people.id</code></td></tr><tr><td>entrant_person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Foreign key: Reference to the entering person<code>people.id</code></td></tr><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td><td>Foreign key: Reference to the transaction<code>transactions_ref.id</code></td></tr><tr><td>reference_person_version</td><td>int</td><td>11</td><td>not null</td><td>Foreign key: Reference to the reference person<code>people_version.version</code></td></tr><tr><td>entrant_person_version</td><td>int</td><td>11</td><td>not null</td><td>Foreign key: Reference to the entering person<code>people_version.version</code></td></tr></tbody></table>

### gbds.apis

The `apis`is used by GBDS to manage multiple APIs active at the same time.

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>api-id</td><td>varchar</td><td>255</td><td>not null</td><td>Unique API instance ID</td></tr><tr><td>hostname</td><td>varchar</td><td>255</td><td>not null</td><td>Host name of the node where the API is running</td></tr><tr><td>port</td><td>int</td><td>11</td><td>not null</td><td>Port where the API is running</td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Type of API instance (LEADER, RUNNER or null)</td></tr></tbody></table>

At API startup, each API will look for itself in this table. If it is not found by hostname/IP and port, it inserts itself into the table with a GUID as *api-id* and *null type* , which means it is not ready for quality extraction. Changes applied directly to this table will be reviewed every 15 minutes.

## Unresolved latent tables (UL) <a href="#unsolved-latent-ul-tables" id="unsolved-latent-ul-tables"></a>

The Unresolved Latent tables are used to store information about UL data and candidates. The tables are described below.

### gbds.ul

The `ul`was designed to store all GBDS ULs and is described as follows:

<table><thead><tr><th width="150">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>uguid</td><td>varchar</td><td>255</td><td>not null</td><td>Primary key; UGUID stored in HBase</td></tr><tr><td>ul_status</td><td>varchar</td><td>255</td><td>not null</td><td><br><code>UNSOLVED</code>or <code>SOLVED</code>; HBase replicates this status</td></tr><tr><td>creation_time</td><td>timestamp</td><td>4</td><td>not null</td><td><code>current_timestamp</code>by default</td></tr><tr><td>person_pguid</td><td>varchar</td><td>255</td><td>null</td><td>PGUID of the corresponding person when<code>SOLVED</code></td></tr><tr><td>person_tguid</td><td>varchar</td><td>255</td><td>null</td><td>TGUID of the corresponding person when<code>SOLVED</code></td></tr><tr><td>fragment_id</td><td>varchar</td><td>255</td><td>null</td><td>Original fragment ID for the fragment that generated the UL</td></tr><tr><td>fragment_case_id</td><td>varchar</td><td>255</td><td>null</td><td>Original case ID for the fragment that generated the UL</td></tr><tr><td>fragment_index</td><td>int</td><td>11</td><td>null</td><td>Fragment index for the UL. By default, the index is set to <code>-1</code>(unknown index, any index)</td></tr><tr><td>analysis_user</td><td>varchar</td><td>255</td><td>null</td><td>User responsible for UL analysis</td></tr><tr><td>analysis_timestamp</td><td>timestamp</td><td>4</td><td>null</td><td>analysis date and time timestamp</td></tr><tr><td>group_guid</td><td>varchar</td><td>255</td><td>not null</td><td>Grouping GUID (for listing linked ULs)</td></tr></tbody></table>

### gbds.ul\_candidates

The `ul_candidates` was designed to store the candidates of each UL that GBDS keeps after any *REVERSE LATENT MATCH* performed on enrollments that generated a *match* with a UL, and is described as follows:

<table><thead><tr><th width="110">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value </th><th>Additional Information</th></tr></thead><tbody><tr><td>ul_uguid</td><td>varchar</td><td>255</td><td>not null</td><td>Primary key; UL UGUID</td></tr><tr><td>person_pguid</td><td>varchar</td><td>255</td><td>not null</td><td>Primary key; candidate PGUID</td></tr><tr><td>person_tguid</td><td>varchar</td><td>255</td><td>not null</td><td>Primary key; candidate TGUID</td></tr><tr><td>person_index</td><td>int</td><td>11</td><td>not null</td><td>Primary key; candidate index finger</td></tr><tr><td>score</td><td>int</td><td>11</td><td>not null</td><td>Corresponding matching score for the candidate</td></tr><tr><td>deleted</td><td>tinyint</td><td>1</td><td>not null</td><td><code>0</code>by default, indicates whether the candidate was deleted to be removed when performing candidate listing operations</td></tr><tr><td>minutiae</td><td>longblob</td><td>Up to 4Gb</td><td>null</td><td>JSON serialization containing the corresponding minutiae. It is a list with the following structure:<br> - <code>queryIndex</code>, <code>int</code> <br>- <code>referenceIndex</code>,<code>int</code></td></tr></tbody></table>

## Notification tables

The notification tables are used to store data for auditing purposes, such as emails, people to be notified, and groups.

### gbds.notify\_user

The `notify_user` was designed to store the data of the user authenticated by gbds.

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Unique user ID.</td></tr><tr><td>username</td><td>varchar</td><td>255</td><td>not null</td><td>authenticated gbds username</td></tr></tbody></table>

### gbds.notify\_group

The `notify_group`was designed to store information about notification groups.

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key;</td></tr><tr><td>name</td><td>varchar</td><td>255</td><td>not null</td><td>Group name</td></tr><tr><td>enabled</td><td>tinyint</td><td>1</td><td>not null</td><td>Defines whether the group will be active or not</td></tr></tbody></table>

### gbds.notify\_group\_email

The `notify_group_email` was designed to store the emails of a given group.

<table><thead><tr><th width="130">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>notify_group_id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Group ID.</td></tr><tr><td>email</td><td>varchar</td><td>255</td><td>not null</td><td>Primary key; <br>Email belonging to the group</td></tr></tbody></table>

### gbds.notify\_user\_group

The `notify_user_group` was designed to store information about which group a given user belongs to.

<table><thead><tr><th width="130">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>notify_user_id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Reference to the user<code>notify_user.id</code></td></tr><tr><td>notify_group_id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Reference to the group<code>notify_group_email.notify_group.id</code></td></tr></tbody></table>

### gbds.people\_transparency

The `people_transparency` was designed to store information about a given person and which actions are taken when that person is searched.

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key;</td></tr><tr><td>pguid</td><td>varchar</td><td>255</td><td>not null</td><td>Reference to the person<code>people.pguid</code></td></tr><tr><td>enabled</td><td>tinyint</td><td>1</td><td>not null</td><td>Reference to the person<code>people.pguid</code></td></tr><tr><td>action</td><td>varchar</td><td>255</td><td>null</td><td>Action to be taken</td></tr></tbody></table>

### gbds.people\_transparency\_group

The `people_transparency_group` was designed to store information about the groups to which a person belongs.

<table><thead><tr><th width="180">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>people_transparency_id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Reference to people_transparency's<code>people_transparency.id</code></td></tr><tr><td>notify_group_id</td><td>bigint</td><td>20</td><td>not null</td><td>Primary key; Reference to the group<code>notify_group_email.notify_group.id</code></td></tr></tbody></table>

## GBDS configuration tables

GBDS uses a relational database to store some API and GBDS settings. The settings table is a special table designed to control certain GBDS and GBDS API settings. These settings are stored in the `gbds.settings`table. The table may contain settings present in the GBDS API, in GBDS, or in both, following the schema below:

<table><thead><tr><th width="100">Type</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Additional Information</th></tr></thead><tbody><tr><td>skey</td><td>varchar</td><td>255</td><td>not null</td><td>Primary key. Parameter key name.</td></tr><tr><td>stype</td><td>varchar</td><td>50</td><td>not null</td><td>Location from which the parameter comes. API or GBDS</td></tr><tr><td>svalue</td><td>varchar</td><td>4096</td><td>null</td><td>Parameter value</td></tr><tr><td>description</td><td>varchar</td><td>4096</td><td>null</td><td>Parameter description</td></tr><tr><td>stimestamp</td><td>datetime</td><td>6</td><td>not null</td><td>Timestamp</td></tr><tr><td>host</td><td>varchar</td><td>1024</td><td>null</td><td>Host name of a node</td></tr></tbody></table>

All settings found in the table will be written to the respective file, `gbdsapi.properties`for both the GBDS API and `application.conf`for GBDS, every 15 minutes. In addition, all configurations updated in memory, both in the API and in GBDS, will be propagated.

{% hint style="info" %}
The value of the parameter defined in the `gbds.settings`table will be propagated to ALL nodes.
{% endhint %}

This feature is controlled by a configuration parameter in the table, `gbds.rdbSystemConfiguration.enabled`. This parameter will allow the replacement of GBDS and API configuration values. Setting the parameter value to `BOTH`will cause the GBDS and API configurations to be replaced.

| gbds.settings / File configuration key                                | Type |
| --------------------------------------------------------------------- | ---- |
| gbscluster.min.quality                                                | API  |
| gbds.enroll.fingerprints.min-nr-template                              | API  |
| gbds.enroll.face.min-nr-template                                      | API  |
| gbds.enroll.iris.min-nr-template                                      | API  |
| gbds.enroll.palmprint.min-nr-template                                 | API  |
| gbds.enroll.newborn-palmprint.min-nr-template                         | API  |
| gbscluster.enroll.fingerprints.verify.matchthreshold                  | API  |
| gbscluster.update.min.quality                                         | API  |
| gbds.transparency.search.identify.request.notify.enabled              | API  |
| gbds.transparency.search.identify.result.actions.enabled              | API  |
| gbds.api.logLevel                                                     | API  |
| gbds.extraction.service                                               | API  |
| gbds.extraction.service.face.count                                    | API  |
| gbds.extraction.service.ginger.count                                  | API  |
| gbds.extraction.service.girl.count                                    | API  |
| gbds.extraction.service.hostname                                      | API  |
| gbds.extraction.service.initialPort                                   | API  |
| gbds.extraction.service.logLevel                                      | API  |
| gbds.extraction.service.maxTries                                      | API  |
| gbds.extraction.service.linkLibSegfault                               | API  |
| gbds.extraction.quality.service                                       | API  |
| gbds.extraction.quality.service.fillTransactionQualityPropertiesTable | API  |
| gbds.faces.extraction.quality.api                                     | API  |
| gbds.faces.extraction.quality.background                              | API  |
| gbds.fingerprints.extraction.quality.api                              | API  |
| gbds.fingerprints.extraction.quality.background                       | API  |
| gbds.extraction.quality.service.finger.count                          | API  |
| gbds.extraction.quality.service.face.count                            | API  |
| gbds.extraction.quality.service.initialPort                           | API  |
| gbds.extraction.quality.service.logLevel                              | API  |
| gbds.extraction.quality.service.timeout                               | API  |
| gbds.extraction.quality.service.hostname                              | API  |
| gbds.extraction.quality.service.maxTries                              | API  |
| gbds.extraction.quality.service.linkLibSegfault                       | API  |
| gbds.extraction.quality.service.rows-on-select                        | API  |
| gbds.extraction.quality.service.submitted-queue-factor                | API  |
| gbds.enroll.face.min.quality                                          | API  |
| gbds.update.face.min.quality                                          | API  |
| gbds.monitor.url                                                      | API  |
| gbds.template.face.multiplicity                                       | API  |
| gbds.biographicBase.enabled                                           | API  |
| gbds.biographicBase.endpoints                                         | API  |
| gbds.biographicBase.get.timeout.ms                                    | API  |
| gbds.biographicBase.list.timeout.ms                                   | API  |
| gbds.biographicBase.logLevel                                          | API  |
| gbds.biographicBase.clientID                                          | API  |
| gbds.biographicBase.clientSecret                                      | API  |
| gbds.biographicBase.lookAllServers                                    | API  |
| gbscluster.fingerprints.extraction.enroll.type                        | API  |
| gbscluster.fingerprints.extraction.verify.type                        | API  |
| gbds.update.exception.reextract                                       | API  |
| gbds.update.exception.reextract.save                                  | API  |
| gbds.biographicBase.autoUpdate                                        | API  |
| gbds.biographicBase.sendPguidAsKey                                    | API  |
| gbds.biographicBase.sendTguidAsKey                                    | API  |
| gbds.log.diagnose                                                     | GBDS |
| gbds.ul.boot.scan.enabled                                             | GBDS |
| gbds.boot.scan.ignoreErrorsOnRegion                                   | GBDS |
| gbds.boot.matcher.creation.sleepTime.ms                               | GBDS |
| gbds.biometric.fingerprint.identify.threshold                         | GBDS |
| gbds.biometric.fingerprint.exception.threshold                        | GBDS |
| gbds.biometric.fingerprint.exception.enabled                          | GBDS |
| gbds.biometric.fingerprint.exception.enroll.min-matches-for-exception | GBDS |
| gbds.biometric.face.identify.threshold                                | GBDS |
| gbds.biometric.face.exception.threshold                               | GBDS |
| gbds.peopleList.countFromRDB                                          | GBDS |
| gbds.biometric.face.enabled.threshold                                 | GBDS |
| gbds.driver.logLevel                                                  | GBDS |
| gbds.log.loadUnload                                                   | GBDS |
| gbds.template.memory.format                                           | GBDS |
| gbds.match.service.enabled                                            | GBDS |
| gbds.match.service.initialPort                                        | GBDS |
| gbds.match.service.logLevel                                           | GBDS |
| gbds.match.service.timeout                                            | GBDS |
| gbds.match.service.templateSend.parallelByModality                    | GBDS |
| gbds.match.service.linkLibSegfault                                    | GBDS |
| gbds.match.service.maxTries                                           | GBDS |
| gbds.match.service.maxConnectionErrors                                | GBDS |
| gbds.memory-monitor                                                   | GBDS |
| gbds.watchdog.interval                                                | GBDS |
| gbds.watchdog.log.mode                                                | GBDS |
| gbds.watchdog.log.level                                               | GBDS |
| gbds.verifyPostMatch.enabled                                          | GBDS |
| gbds.transparency.search.identify.result.notify.enabled               | BOTH |
| gbds.transparency.email-notifier.url                                  | BOTH |
| gbds.transparency.email-notifier.log-level                            | BOTH |
| gbds.transparency.email-notifier.timeout                              | BOTH |
| gbscluster.update.consider.fingerprints                               | BOTH |
| gbscluster.update.consider.faces                                      | BOTH |
| gbscluster.update.consider.faces.beforeFingerprints                   | BOTH |
| gbscluster.update.faces.verify.matchthreshold                         | BOTH |
| gbscluster.update.minimum.fingers                                     | BOTH |
| gbds.search.verify.adjust-resolution                                  | BOTH |

Other settings can be placed in the table `gbds.settings`in rdb and all will be written to the API or the GBDS file, according to the type of configuration. However, runtime memory reloads will not be performed for these new settings, only after restarting the API and/or GBDS.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.griaule.com/gbs/en/gbds-integration/gbds-4-relational-database.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
