Skip to main content

Database Schema Reference

Auto-generated β€” do not edit. Re-run scripts/generate-db-erd.ts to update.

Summary Stats​

  • Total entities: 26
  • Database: PostgreSQL (TypeORM)
  • Tenant isolation: Schema-per-tenant (search_path)
  • Generated: 2026-04-05T13:06:07.159Z

Entity Catalog​

Entity ClassTable NameModuleDescription
ApiAuditLogapi_audit_logsAdministration & Authβ€”
IpBlacklistip_blacklistAdministration & Authβ€”
IpWhitelistip_whitelistAdministration & Authβ€”
RolerolesAdministration & Authβ€”
SavedFiltersaved_filtersAdministration & AuthSavedFilter β€” User-scoped saved filter presets for Explore page Each user can sa
SecurityAuditLogsecurity_audit_logsAdministration & Authβ€”
SettingssettingsAdministration & Authβ€”
TokenBlacklisttoken_blacklistAdministration & Authβ€”
UserusersAdministration & Authβ€”
AnomalyDayanomaly_daysAI LabsAnomalyDay tracks days with detected data anomalies (spikes) Used for: - KPI nor
AssetassetsExposure ManagementAsset entity for storing vulnerability management asset inventory. Supports mult
ScanHistoryImportscan_history_importsExposure ManagementTracks individual scan-run imports. Each row represents one Tenable scan history
ScanImportJobscan_import_jobsExposure ManagementTracks bulk scan history import jobs. Each row represents one admin-initiated im
SyncJobsync_jobsExposure Managementβ€”
SyncLogsync_logsExposure ManagementVulnerability entity for storing Tenable.io vulnerability data This allows viewi
VulnerabilityvulnerabilitiesExposure ManagementVulnerability entity for storing Tenable.io vulnerability data This allows viewi
VulnerabilityStateTransitionvulnerability_state_transitionsExposure ManagementVulnerabilityStateTransition tracks state changes over time Enhanced to support
VulnerabilityStatsvulnerability_statsExposure ManagementVulnerabilityStats entity for pre-computed daily aggregations This allows fast d
VulnerabilityStatsByCategoryvulnerability_stats_by_categoryExposure ManagementVulnerabilityStatsByCategory stores daily per-category aggregations This enables
ApiConfigapi_configOperations & Integrationsβ€”
ArchivedDataarchived_dataOperations & Integrationsβ€”
ChunkProgresschunk_progressOperations & IntegrationsChunkProgress entity for tracking individual chunk downloads Enables resume capa
CleanupLogcleanup_logsOperations & Integrationsβ€”
DateExclusiondate_exclusionsOperations & IntegrationsDateExclusion entity - stores excluded dates for dashboard calculations Enhanced
ExportJobexport_jobsOperations & IntegrationsExportJob entity for tracking async export requests Enables background generatio
QuarantinedDataquarantined_dataOperations & IntegrationsQuarantinedData entity for storing corrupted or invalid data Enables data integr

Exposure Management Tables​

9 entities

Entity Relationships (Mermaid ERD)​

Column Reference​

assets (Asset)​

Asset entity for storing vulnerability management asset inventory. Supports multi-platform ingestion (Tenable, Qualys, Rapid7, CrowdStrike, etc.) Core fields are normalized across tools; tool-specific

ColumnTypeNullableNotes
uuidvarcharNoPK
idvarcharYes
hostnamevarcharYes
ipv4simple-arrayYes
ipv6simple-arrayYes
fqdnsimple-arrayYes
operatingSystemvarcharYes
hasAgentbooleanNo
lastSeentimestampYes
lastAuthenticatedScanDatetimestampYes
lastLicensedScanDatetimestampYes
sourcestextYes
tagstextYes
isLicensedbooleanNo
assetTypevarcharYes
acrScorefloatYes
aesScorefloatYes
systemTypevarcharYes
agentNamevarcharYes
netbiosNamevarcharYes
macAddressestextYes
networkIdvarcharYes
installedSoftwaretextYes
sshFingerprintvarcharYes
isPublicbooleanYes
terminatedAttimestampYes
lastScanTimetimestampYes
firstObservedtimestampYes
sourceToolvarcharNo
sourceToolAssetIdvarcharYes
toolSpecificDatatextYes
syncJobIdvarcharYes
createdAtvarcharNo
updatedAtvarcharNo

scan_history_imports (ScanHistoryImport)​

Tracks individual scan-run imports. Each row represents one Tenable scan history entry that was (or is being) imported. The UNIQUE(scan_id, history_id) constraint prevents re-importing the same scan r

ColumnTypeNullableNotes
idintNoPK
importJobIdvarcharNo
scanIdintNo
scanNamevarcharYes
historyIdintNo
scanDatetimestamptzNo
findingsCountintNo
statusvarcharNo
errortextYes
processedAttimestamptzYes
createdAttimestamptzNo

scan_import_jobs (ScanImportJob)​

Tracks bulk scan history import jobs. Each row represents one admin-initiated import job which may process multiple scan runs. Progress counters are updated in real-time during import. Status lifecycl

ColumnTypeNullableNotes
idvarcharNoPK
statusvarcharNo
totalRunsintNo
processedRunsintNo
failedRunsintNo
skippedRunsintNo
totalFindingsintNo
selectedScanIdsjsonbYes
dateRangeStarttimestamptzYes
dateRangeEndtimestamptzYes
dryRunbooleanNo
startedByvarcharYes
startedAttimestamptzYes
completedAttimestamptzYes
errortextYes
createdAttimestamptzNo

sync_jobs (SyncJob)​

ColumnTypeNullableNotes
iduuidNoPK
statusvarcharNo
ingestionStatusvarcharNo
statsStatusvarcharNo
triggerTypevarcharNo
scopevarcharNo
dateRangeStartdateYes
dateRangeEnddateYes
progressintNo
totalRecordsintNo
processedRecordsintNo
apiCallsCountintNo
phasevarcharNo
recordsInsertedintNo
recordsUpdatedintNo
recordsSkippedintNo
recordsFailedintNo
statusMessagetextYes
errorMessagetextYes
triggeredByvarcharYes
createdAtvarcharNo
startedAttimestampYes
completedAttimestampYes
updatedAtvarcharNo

sync_logs (SyncLog)​

Vulnerability entity for storing Tenable.io vulnerability data This allows viewing real IPs, hostnames, and downloading raw data UNIQUE CONSTRAINT: instanceKey (sha256 of assetUuid:pluginId:port:proto

ColumnTypeNullableNotes
iduuidNoPK
syncJobIdvarcharNo
endpointvarcharNo
statusvarcharNo
durationMsintYes
recordCountintNo
triggerTypevarcharNo
triggeredByvarcharYes
errorMessagetextYes
timestampvarcharNo

vulnerabilities (Vulnerability)​

Vulnerability entity for storing Tenable.io vulnerability data This allows viewing real IPs, hostnames, and downloading raw data UNIQUE CONSTRAINT: instanceKey (sha256 of assetUuid:pluginId:port:proto

ColumnTypeNullableNotes
iduuidNoPK
instanceKeyvarcharYes
findingIdvarcharYes
assetUuidvarcharNo
hostnamevarcharYes
ipv4simple-arrayYes
ipv6simple-arrayYes
operatingSystemvarcharYes
fqdnsimple-arrayYes
pluginIdintNo
pluginNamevarcharNo
pluginFamilyvarcharYes
descriptiontextYes
solutiontextYes
portintYes
protocolvarcharYes
servicevarcharYes
severityvarcharNo
severityIdintNo
cvssBaseScoredecimalYes
cvss3BaseScoredecimalYes
cvesimple-arrayYes
cveIdstextYes
exploitAvailablebooleanNo
hasPatchbooleanNo
statevarcharNo
firstFoundtimestampYes
lastFoundtimestampYes
lastFixedtimestampYes
firstFixedObservedAttimestampYes
syncJobIdvarcharYes
osCategoryvarcharYes
dataChecksumvarcharYes
versionintNo
lastSeenAttimestampYes
createdAtvarcharNo
updatedAtvarcharNo

vulnerability_state_transitions (VulnerabilityStateTransition)​

VulnerabilityStateTransition tracks state changes over time Enhanced to support instanceKey-based tracking and detailed event metadata Used for: - Historical trend computation (correct snapshots) - MT

ColumnTypeNullableNotes
iduuidNoPK
instanceKeyvarcharYes
assetUuidvarcharNo
pluginIdintNo
portintNo
protocolvarcharNo
previousStatevarcharYes
newStatevarcharNo
oldLastFoundtimestampYes
newLastFoundtimestampYes
oldLastFixedtimestampYes
newLastFixedtimestampYes
syncJobIdvarcharYes
reasonTagvarcharYes
sourcevarcharNo
hasPatchbooleanYes
severityvarcharYes
pluginFamilyvarcharYes
transitionedAtvarcharNo

vulnerability_stats (VulnerabilityStats)​

VulnerabilityStats entity for pre-computed daily aggregations This allows fast dashboard loading without processing 100k+ records in realtime

ColumnTypeNullableNotes
datedateNoPK
totalActiveintNo
totalNewintNo
totalRemediatedintNo
totalResurfacedintNo
patchableNewintNo
unpatchableNewintNo
patchableRemediatedintNo
unpatchableRemediatedintNo
patchableResurfacedintNo
unpatchableResurfacedintNo
totalRemediatedCumulativeintNo
criticalCountintNo
highCountintNo
mediumCountintNo
lowCountintNo
infoCountintNo
patchableActiveintNo
unpatchableActiveintNo
patchableCriticalintNo
patchableHighintNo
unpatchableCriticalintNo
unpatchableHighintNo
patchableMediumintNo
patchableLowintNo
patchableInfointNo
unpatchableMediumintNo
unpatchableLowintNo
unpatchableInfointNo
reopenedCountintNo
meanTimeToRemediatefloatNo
osCountssimple-jsonYes
dataSourcevarcharNo
syncJobIdvarcharYes
computedAtvarcharNo

vulnerability_stats_by_category (VulnerabilityStatsByCategory)​

VulnerabilityStatsByCategory stores daily per-category aggregations This enables correct historical trend computation - trends are computed from these snapshots, NOT derived from current state Categor

ColumnTypeNullableNotes
datedateNoPK
osCategoryvarcharNoPK
totalActiveintNo
totalNewintNo
totalRemediatedintNo
totalResurfacedintNo
patchableNewintNo
unpatchableNewintNo
patchableRemediatedintNo
unpatchableRemediatedintNo
patchableResurfacedintNo
unpatchableResurfacedintNo
criticalCountintNo
highCountintNo
mediumCountintNo
lowCountintNo
infoCountintNo
patchableActiveintNo
unpatchableActiveintNo
patchableCriticalintNo
patchableHighintNo
unpatchableCriticalintNo
unpatchableHighintNo
patchableMediumintNo
patchableLowintNo
patchableInfointNo
unpatchableMediumintNo
unpatchableLowintNo
unpatchableInfointNo
validRemediationsintNo
mttrHoursdecimalYes
mttrHoursValidOnlydecimalYes
dataSourcevarcharNo
syncJobIdvarcharYes
computedAtvarcharNo

AI Labs Tables​

1 entity

Entity Relationships (Mermaid ERD)​

Column Reference​

anomaly_days (AnomalyDay)​

AnomalyDay tracks days with detected data anomalies (spikes) Used for: - KPI normalization (exclude anomaly days from counts) - Spike investigation and root cause analysis - Automated detection based

ColumnTypeNullableNotes
datedateNoPK
fixedCountintNo
baselineAvgdecimalYes
baselineStddevdecimalYes
classificationvarcharNo
statusvarcharNo
suspectedCausevarcharYes
distinctPluginsAffectedintYes
distinctAssetsAffectedintYes
notestextYes
createdAtvarcharNo

Administration & Auth Tables​

9 entities

Entity Relationships (Mermaid ERD)​

Column Reference​

api_audit_logs (ApiAuditLog)​

ColumnTypeNullableNotes
idintNoPK
timestampvarcharNo
endpointvarcharNo
methodvarcharNo
statusvarcharNo
httpStatusintYes
durationMsintNo
recordsLoadedintNo
chunksProcessedintNo
totalChunksintNo
syncTypevarcharNo
syncIdvarcharYes
errorMessagetextYes
requestParamsjsonbYes
responseMetadatajsonbYes

ip_blacklist (IpBlacklist)​

ColumnTypeNullableNotes
iduuidNoPK
ipAddressvarcharNo
reasonvarcharNo
failedAttemptsintNo
relatedUserEmailssimple-arrayYes
blockedAttimestampNo
expiresAttimestampYes
isActivebooleanNo
blockedByEmailvarcharYes
unblockedByEmailvarcharYes
unblockedAttimestampYes
createdAtvarcharNo

ip_whitelist (IpWhitelist)​

ColumnTypeNullableNotes
iduuidNoPK
ipAddressvarcharNo
reasonvarcharNo
descriptionvarcharYes
whitelistedAttimestampNo
expiresAttimestampYes
isActivebooleanNo
createdByEmailvarcharNo
removedByEmailvarcharYes
removedAttimestampYes
createdAtvarcharNo

roles (Role)​

ColumnTypeNullableNotes
iduuidNoPK
namevarcharNo
descriptiontextYes
permissionsjsonbNo
isSystembooleanNo
createdAtvarcharNo
updatedAtvarcharNo

Relations:

  • users: OneToMany β†’ User

saved_filters (SavedFilter)​

SavedFilter β€” User-scoped saved filter presets for Explore page Each user can save named filter configurations for both the Vulnerabilities and Assets tabs. Filters can be Quick Filters, Advanced Quer

ColumnTypeNullableNotes
iduuidNoPK
userIduuidNo
namevarcharNo
pagevarcharNo
filterDatajsonbNo
isDefaultbooleanNo
createdAtvarcharNo
updatedAtvarcharNo

security_audit_logs (SecurityAuditLog)​

ColumnTypeNullableNotes
idintNoPK
timestampvarcharNo
eventTypevarcharNo
userIdvarcharYes
userEmailvarcharYes
userRolevarcharYes
ipAddressvarcharYes
userAgentvarcharYes
endpointvarcharYes
methodvarcharYes
successbooleanNo
detailsjsonbYes

settings (Settings)​

ColumnTypeNullableNotes
keyvarcharNoPK
valuejsonbNo
descriptionvarcharYes
updatedAtvarcharNo

token_blacklist (TokenBlacklist)​

ColumnTypeNullableNotes
idintNoPK
tokenvarcharNo
userIdvarcharYes
reasonvarcharNo
expiresAttimestampNo
createdAtvarcharNo

users (User)​

ColumnTypeNullableNotes
iduuidNoPK
emailvarcharNo
passwordHashvarcharNo
namevarcharNo
rolevarcharYes
statusvarcharNo
failedLoginAttemptsintNo
lockedUntiltimestampYes
lastLoginAttimestampYes
lastLoginIpvarcharYes
twoFactorEnabledbooleanNo
twoFactorSecretvarcharYes
resetPasswordTokenvarcharYes
resetPasswordExpirestimestampYes
createdAtvarcharNo
updatedAtvarcharNo

Relations:

  • roleDefinition: ManyToOne β†’ Role

Operations & Integrations Tables​

7 entities

Entity Relationships (Mermaid ERD)​

Column Reference​

api_config (ApiConfig)​

ColumnTypeNullableNotes
iduuidNoPK
keyvarcharNo
encryptedValuetextNo
descriptionvarcharYes
createdAtvarcharNo
updatedAtvarcharNo

archived_data (ArchivedData)​

ColumnTypeNullableNotes
idintNoPK
filenamevarcharNo
startDatedateNo
endDatedateNo
statusvarcharNo
sizeBytesbigintNo
recordCountintNo
storagePathvarcharYes
checksumvarcharYes
errorMessagetextYes
createdByvarcharYes
createdAtvarcharNo
restoredAttimestampYes

chunk_progress (ChunkProgress)​

ChunkProgress entity for tracking individual chunk downloads Enables resume capability and detailed progress monitoring

ColumnTypeNullableNotes
iduuidNoPK
syncJobIdvarcharNo
exportUuidvarcharNo
chunkIdintNo
chunkIndexintNo
totalChunksintNo
statusvarcharNo
recordCountintNo
retryCountintNo
maxRetriesintNo
startedAttimestampYes
completedAttimestampYes
durationMsintYes
errorMessagetextYes
lastErrortextYes
createdAtvarcharNo
updatedAtvarcharNo

cleanup_logs (CleanupLog)​

ColumnTypeNullableNotes
iduuidNoPK
jobIdvarcharYes
assetUuidvarcharNo
hostnamevarcharYes
lastSeentimestampNo
reasonvarcharNo
deletedVulnerabilitiesCountintNo
deletedAtvarcharNo

date_exclusions (DateExclusion)​

DateExclusion entity - stores excluded dates for dashboard calculations Enhanced with automated anomaly detection (Phase 3): - Supports both manual exclusions and auto-detected spikes - Tracks baselin

ColumnTypeNullableNotes
datedateNoPK
isExcludedbooleanNo
reasonvarcharYes
excludedByvarcharYes
isAutoDetectedbooleanNo
baselineAvgdecimalYes
baselineStddevdecimalYes
fixedCountintYes
suspectedCausevarcharYes
distinctPluginsAffectedintYes
distinctAssetsAffectedintYes
statusvarcharNo
createdAttimestampNo
updatedAttimestampNo

export_jobs (ExportJob)​

ExportJob entity for tracking async export requests Enables background generation of large exports without blocking the frontend

ColumnTypeNullableNotes
iduuidNoPK
statusvarcharNo
formatvarcharNo
progressintNo
totalRecordsintYes
processedRecordsintYes
filePathvarcharYes
downloadUrlvarcharYes
fileSizebigintYes
expiresAttimestampYes
errorMessagetextYes
requestedByvarcharYes
filterssimple-jsonYes
createdAtvarcharNo
updatedAtvarcharNo
completedAttimestampYes

quarantined_data (QuarantinedData)​

QuarantinedData entity for storing corrupted or invalid data Enables data integrity protection and automated recovery attempts

ColumnTypeNullableNotes
iduuidNoPK
syncJobIdvarcharNo
chunkIdintYes
quarantineReasonvarcharNo
errorDetailstextNo
rawDatajsonbYes
assetUuidvarcharYes
pluginIdintYes
retryCountintNo
maxRetriesintNo
statusvarcharNo
resolutionNotestextYes
resolvedByvarcharYes
quarantinedAtvarcharNo
lastRetryAttimestampYes
resolvedAttimestampYes
updatedAtvarcharNo

Generated on 2026-04-05T13:06:07.159Z