erDiagram clients ||--o{ clientCanSync : "has" clients ||--o{ documents : "contains" clients ||--o{ collectorVersions : "has" clients ||--o{ collectorActiveVersions : "has current" clients ||--o{ collectorMinCleanVersions : "has" clients ||--o{ collectorMinTextVersions : "has" clients ||--o{ collectorQueries : "maps to" documents ||--o{ documentEntries : "has" documents ||--o{ documentCleans : "has clean version" documentCleans ||--o{ documentTextExtractions : "has text extraction" documentTextExtractions ||--o{ results : "produces" queries ||--o{ queryVersions : "has" queries ||--o{ queryActiveVersions : "has current" queries ||--o{ requiredQueries : "requires" queries ||--o{ queryConfigs : "configured by" queries ||--o{ collectorQueries : "used in" queries ||--o{ results : "generates" results ||--o{ resultDependencies : "depends on" clients { uuid id PK TEXT name } clientCanSync { uuid id PK uuid clientId FK boolean canSync } documents { uuid id PK uuid clientId FK text hash } documentEntries { uuid id PK uuid documentId FK text bucket text key } documentCleans { uuid id PK uuid documentId FK int version text bucket text key } documentTextExtractions { uuid id PK uuid cleanEntryId FK int version text bucket text key } queries { uuid id PK queryType type } queryVersions { uuid queryId FK int id timestamp addedAt } queryActiveVersions { uuid id PK uuid queryId FK int versionId FK } requiredQueries { uuid id PK uuid queryId FK uuid requiredQueryId FK int addedVersion FK int removedVersion FK } queryConfigs { uuid id PK uuid queryId FK jsonb config int addedVersion FK int removedVersion FK } collectorVersions { uuid clientId FK int id timestamp addedAt } collectorActiveVersions { uuid id PK uuid clientId FK int versionId FK } collectorMinCleanVersions { uuid id PK uuid clientId FK int versionId int addedVersion FK int removedVersion FK } collectorMinTextVersions { uuid id PK uuid clientId FK int versionId int addedVersion FK int removedVersion FK } collectorQueries { uuid id PK uuid clientId FK varchar name uuid queryId FK int addedVersion FK int removedVersion FK } results { uuid id PK uuid textEntryId FK uuid queryId FK TEXT value int queryVersion } resultDependencies { uuid resultId FK uuid requiredResultId FK }