# GBDS Relational Databases

## Introduction

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

The document is divided into four sections that describe:

* The general tables ;
* The Unresolved Latents (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

Error in the Federal Revenue `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

Error in the Federal Revenue `people_version`table is intended to store information about the last changes in a person's record 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 excluded 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 registry transactions</td></tr></tbody></table>

### gbds.transactions\_ref

Error in the Federal Revenue `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

Error in the Federal Revenue `transactions`table is intended to store information about the biometric data quality analysis 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 Registry 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>creation date and time timestamp of the transaction</td></tr><tr><td>updated</td><td>datetime</td><td>6</td><td>null</td><td>date and time timestamp of the last modification of the transaction</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 model 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>Type of transaction. 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>Fingerprint global quality score</td></tr><tr><td>global_quality</td><td>int</td><td>11</td><td>null</td><td>Profile global 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 ID of the API instance 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

Error in the Federal Revenue `transaction_fields`table aims 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>Effective value of the field (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 table columns below are dynamic, according to the quality extraction. If any editing of the fields occurs in future versions, the data here may become 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 table columns below are dynamic, according to the quality extraction. If any editing of the fields occurs in future versions, the data here may become 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 table `biometrics`intended to store a person's biometric data, being linked to the `transaction`and to the `people_version`system. 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>Index of the current biometric</td></tr><tr><td>quality</td><td>int</td><td>11</td><td>null</td><td>Quality score for the extracted biometric model</td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Modality of the current biometric</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 table `fields`       intended to store a person's non-biometric information, 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>Effective value of the field (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 table `exceptions`intended to store information about 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 creation of the exception</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 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 entrant 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 entrant 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>ID of the unique API instance</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>

On API startup, each API will look for itself in this table. If not found by host name/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 polled every 15 minutes.

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

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

### gbds.ul

The table `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>date and time timestamp of the analysis</td></tr><tr><td>group_guid</td><td>varchar</td><td>255</td><td>not null</td><td>Grouping GUID (to list linked ULs)</td></tr></tbody></table>

### gbds.ul\_candidates

The table `ul_candidates` was designed to store the candidates of each UL that GBDS keeps after any *REVERSE LATENT MATCHING* 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 finger index</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 excluded 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 table `notify_user` was designed to store the authenticated user data for 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 table `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 table `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 that belongs to the group</td></tr></tbody></table>

### gbds.notify\_user\_group

The table `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 table `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 table `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 configurations. 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. Name of the parameter key.</td></tr><tr><td>stype</td><td>varchar</td><td>50</td><td>not null</td><td>Location from where 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`both for the GBDS API and `application.conf`for GBDS, every 15 minutes. Additionally, all settings updated in memory, both in the API and in GBDS, will be propagated.

{% hint style="info" %}
The parameter value set 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 overriding the GBDS and API configuration values. Setting the parameter value to `BOTH`will cause the GBDS and API settings to be overridden.

| 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.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 they will all be written in the API or in 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.
