camera-database/schema/README-SCHEMA.md

4.9 KiB

Club Daguerre Camera Database - Schema Installation

Overview

Complete PostgreSQL 16 schema for the Club Daguerre camera database, preserving Harald Goergens' 30+ year classification work with modern metadata management.

Prerequisites

  • PostgreSQL 16 installed
  • camera_db database created
  • Port 5433 (or your configured port)

Installation Order

The schema is split into logical sections for clarity and maintainability:

  1. 01-core-hierarchy.sql - Manufacturers, models, variants, combos
  2. 02-supporting.sql - Lenses, shutters, formats, terminology
  3. 03-content.sql - Images, documents, articles (multi-level linking)
  4. 04-auth.sql - Members, research access, audit log
  5. 05-history.sql - History tables for audit trail
  6. 06-triggers.sql - Triggers and functions for automation
  7. 07-views.sql - Materialized views for performance
  8. 08-seed-data.sql - Initial data (sources, terminology, samples)

Quick Installation

Method 1: All at Once

cd /data/camera-database/schema

# Run all files in order
for file in 0{1..8}-*.sql; do
  echo "Installing $file..."
  psql -h localhost -p 5433 -U postgres -d camera_db -f "$file"
done

Method 2: One by One

cd /data/camera-database/schema

psql -h localhost -p 5433 -U postgres -d camera_db -f 01-core-hierarchy.sql
psql -h localhost -p 5433 -U postgres -d camera_db -f 02-supporting.sql
psql -h localhost -p 5433 -U postgres -d camera_db -f 03-content.sql
psql -h localhost -p 5433 -U postgres -d camera_db -f 04-auth.sql
psql -h localhost -p 5433 -U postgres -d camera_db -f 05-history.sql
psql -h localhost -p 5433 -U postgres -d camera_db -f 06-triggers.sql
psql -h localhost -p 5433 -U postgres -d camera_db -f 07-views.sql
psql -h localhost -p 5433 -U postgres -d camera_db -f 08-seed-data.sql

Verification

After installation:

-- Connect to database
psql -h localhost -p 5433 -U postgres -d camera_db

-- Check tables
\dt

-- Check views
\dv

-- Check materialized views
\dm

-- Check functions
\df

-- Run validation
SELECT * FROM validate_goergens_structure();

-- Check seed data
SELECT * FROM content_sources;
SELECT * FROM terminology LIMIT 10;

-- Exit
\q

Schema Statistics

Expected after installation:

  • Tables: 35
  • Indexes: ~80
  • Views: 2
  • Materialized Views: 3
  • Functions: 5
  • Triggers: 8

Key Features

1. Goergens Hierarchy Preservation

  • Manufacturers (ERNM, ZEII, etc.)
  • Models (1910, 0450, etc.)
  • Variants (a, b, c - color/material)
  • Combos (01, 02 - lens/shutter configs)

2. Multi-Level Content Linking

Images, documents, and articles can link at ANY level:

  • Manufacturer level (company history)
  • Model level (camera manual - shared by all variants)
  • Variant level (color-specific photo)
  • Combo level (lens manual - combo-specific)

3. Rights Management

  • verified: Publishable content
  • uncertain: Research-only (Steimer data)
  • restricted: Internal only

4. Performance Optimizations

  • Denormalized fields in lens_shutter_combos
  • Materialized views for dashboard/search
  • GIN indexes for full-text search
  • GIST indexes for range queries

5. Audit Trail

  • Version numbers on all records
  • History tables track all changes
  • Comprehensive audit log
  • Timestamp tracking

6. Multilingual Support

  • German/English core (expandable)
  • Separate i18n tables for content
  • Language-agnostic codes

Maintenance

Refresh Materialized Views

-- Hourly (manufacturer stats)
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_manufacturer_stats;

-- Every 15-30 minutes (search catalog)
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_public_catalog;

-- Every 5 minutes (dashboard)
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_dashboard_stats;

Backup

# Full backup
pg_dump -h localhost -p 5433 -U postgres camera_db | gzip > /mnt/data/postgresql/backups/camera_db_$(date +%Y%m%d).sql.gz

# Schema only
pg_dump -h localhost -p 5433 -U postgres -s camera_db > /mnt/data/postgresql/backups/camera_db_schema.sql

Next Steps

  1. Schema installed
  2. Import Goergens data (74,000+ cameras)
  3. Import Photo Antiquaria articles
  4. Add images and documents
  5. Develop Flask web application

Troubleshooting

"relation already exists"

Schema already partially installed. Either:

  • Drop database and recreate: DROP DATABASE camera_db; CREATE DATABASE camera_db;
  • Or skip to the file where installation failed

Foreign key violations

Files must be run in order (01 through 08). Foreign keys depend on tables from earlier files.

Permission denied

Use postgres superuser: -U postgres

Documentation

  • Design Document: /data/camera-database/docs/database-design.md
  • PostgreSQL Setup: /data/camera-database/docs/postgresql-setup.md
  • Goergens Email: /data/camera-database/docs/goergens-email.txt

Version

  • Schema Version: 1.0
  • PostgreSQL: 16+
  • Date: November 2025
  • Author: Walter Jekat / Club Daguerre e.V.