234 lines
4.7 KiB
Markdown
234 lines
4.7 KiB
Markdown
# Database Schema v1.0
|
|
|
|
Doel: PostGIS-first schema dat projecten, gebieden, datasets, analyses, AI-resultaten, QA/QC en exports ondersteunt.
|
|
|
|
## 1. projects
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
name TEXT NOT NULL
|
|
description TEXT
|
|
region TEXT DEFAULT 'Kempen'
|
|
created_at TIMESTAMP NOT NULL
|
|
updated_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 2. areas
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
project_id UUID REFERENCES projects(id)
|
|
name TEXT NOT NULL
|
|
geometry GEOMETRY(POLYGON, 4326) NOT NULL
|
|
area_m2 DOUBLE PRECISION
|
|
crs TEXT DEFAULT 'EPSG:4326'
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 3. datasets
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
project_id UUID REFERENCES projects(id)
|
|
name TEXT NOT NULL
|
|
dataset_type TEXT NOT NULL -- raster, vector, lidar, reference, model_output
|
|
source TEXT -- upload, GRB, OSM, Sentinel, DHMV
|
|
original_path TEXT
|
|
processed_path TEXT
|
|
crs TEXT
|
|
srid INTEGER
|
|
bounds GEOMETRY(POLYGON, 4326)
|
|
metadata_json JSONB
|
|
status TEXT NOT NULL
|
|
created_at TIMESTAMP NOT NULL
|
|
updated_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 4. dataset_versions
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
dataset_id UUID REFERENCES datasets(id)
|
|
version_label TEXT
|
|
path TEXT
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 5. vector_features
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
dataset_id UUID REFERENCES datasets(id)
|
|
source_feature_id TEXT
|
|
feature_type TEXT
|
|
properties JSONB
|
|
geometry GEOMETRY(GEOMETRY, 4326)
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
Spatial index required on geometry.
|
|
|
|
## 6. raster_assets
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
dataset_id UUID REFERENCES datasets(id)
|
|
asset_type TEXT -- original, clipped, tile, preview, index, mask
|
|
path TEXT NOT NULL
|
|
bounds GEOMETRY(POLYGON, 4326)
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 7. analysis_runs
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
project_id UUID REFERENCES projects(id)
|
|
area_id UUID REFERENCES areas(id)
|
|
analysis_type TEXT NOT NULL -- detection, segmentation, qaqc, change, raster_index
|
|
status TEXT NOT NULL
|
|
parameters_json JSONB
|
|
started_at TIMESTAMP
|
|
finished_at TIMESTAMP
|
|
error_message TEXT
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 8. detections
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
analysis_run_id UUID REFERENCES analysis_runs(id)
|
|
class_name TEXT NOT NULL
|
|
confidence DOUBLE PRECISION
|
|
bbox_json JSONB
|
|
source_tile_path TEXT
|
|
geometry GEOMETRY(POLYGON, 4326)
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
Spatial index required on geometry.
|
|
|
|
## 9. segmentations
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
analysis_run_id UUID REFERENCES analysis_runs(id)
|
|
class_name TEXT NOT NULL
|
|
confidence DOUBLE PRECISION
|
|
area_m2 DOUBLE PRECISION
|
|
raster_mask_path TEXT
|
|
geometry GEOMETRY(GEOMETRY, 4326)
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 10. metrics
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
analysis_run_id UUID REFERENCES analysis_runs(id)
|
|
metric_key TEXT NOT NULL
|
|
metric_value DOUBLE PRECISION
|
|
unit TEXT
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 11. quality_checks
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
analysis_run_id UUID REFERENCES analysis_runs(id)
|
|
reference_dataset_id UUID REFERENCES datasets(id)
|
|
check_type TEXT NOT NULL
|
|
score DOUBLE PRECISION
|
|
findings_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 12. quality_findings
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
quality_check_id UUID REFERENCES quality_checks(id)
|
|
finding_type TEXT NOT NULL -- false_positive, false_negative, low_iou, matched
|
|
class_name TEXT
|
|
score DOUBLE PRECISION
|
|
geometry GEOMETRY(GEOMETRY, 4326)
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 13. annotations
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
project_id UUID REFERENCES projects(id)
|
|
dataset_id UUID REFERENCES datasets(id)
|
|
class_name TEXT NOT NULL
|
|
annotation_type TEXT -- bbox, polygon, mask
|
|
geometry GEOMETRY(GEOMETRY, 4326)
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 14. model_registry
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
name TEXT NOT NULL
|
|
model_type TEXT -- yolo, sam, unet, custom_pytorch
|
|
version TEXT
|
|
artifact_path TEXT
|
|
classes_json JSONB
|
|
metrics_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 15. exports
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
project_id UUID REFERENCES projects(id)
|
|
analysis_run_id UUID REFERENCES analysis_runs(id)
|
|
export_type TEXT NOT NULL -- geojson, yolo, coco, mask, report
|
|
path TEXT NOT NULL
|
|
metadata_json JSONB
|
|
created_at TIMESTAMP NOT NULL
|
|
```
|
|
|
|
## 16. jobs
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY
|
|
job_type TEXT NOT NULL
|
|
status TEXT NOT NULL
|
|
payload_json JSONB
|
|
result_json JSONB
|
|
error_message TEXT
|
|
created_at TIMESTAMP NOT NULL
|
|
started_at TIMESTAMP
|
|
finished_at TIMESTAMP
|
|
```
|
|
|
|
## Indexen
|
|
|
|
- areas.geometry GIST
|
|
- datasets.bounds GIST
|
|
- vector_features.geometry GIST
|
|
- detections.geometry GIST
|
|
- segmentations.geometry GIST
|
|
- quality_findings.geometry GIST
|
|
- annotations.geometry GIST
|
|
|
|
## Belangrijke regels
|
|
|
|
- Grote bestanden nooit in database opslaan.
|
|
- Geometrieën altijd met SRID opslaan.
|
|
- Iedere modeloutput moet gekoppeld zijn aan een analysis_run.
|
|
- Iedere analysis_run moet parameters opslaan voor reproduceerbaarheid.
|