SQL

CREATE TABLE bookings  (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  trainer_id INTEGER NOT NULL REFERENCES trainers(id) ON DELETE CASCADE,
  student_id INTEGER NOT NULL REFERENCES students(id) ON DELETE CASCADE,
  service_key TEXT NOT NULL,
  -- 'einzel50',
  'platz',
  'zehnerkarte',
  etc.
  starts_at TEXT NOT NULL,
  -- ISO-8601 datetime
  duration_min INTEGER NOT NULL,
  card_id INTEGER REFERENCES cards(id),
  -- NULL = ohne Karte abgerechnet
  invoice_id INTEGER REFERENCES invoices(id),
  video_analysis TEXT,
  -- JSON: { status,
  swingCount,
  requestedAt,
  ... }
  notes TEXT,
  -- Trainer-Notiz aus Nachbereitung
  status TEXT NOT NULL DEFAULT 'confirmed',
  -- 'confirmed' | 'cancelled' | 'completed'
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
  protocol TEXT,
  protocol_approved_at TEXT
)

+ Add column

Columns

Column Data type Allow null Primary key Actions
id INTEGER Rename | Drop
trainer_id INTEGER Rename | Drop
student_id INTEGER Rename | Drop
service_key TEXT Rename | Drop
starts_at TEXT Rename | Drop
duration_min INTEGER Rename | Drop
card_id INTEGER Rename | Drop
invoice_id INTEGER Rename | Drop
video_analysis TEXT Rename | Drop
notes TEXT Rename | Drop
status TEXT Rename | Drop
created_at TEXT Rename | Drop
protocol TEXT Rename | Drop
protocol_approved_at TEXT Rename | Drop

Foreign Keys

Column Destination
invoice_id invoices.id
card_id cards.id
student_id students.id
trainer_id trainers.id

+ Add index

Indexes

Name Columns Unique SQL Drop?
idx_bookings_student student_id SQL
CREATE INDEX idx_bookings_student
ON bookings(student_id)
Drop
idx_bookings_trainer_date
  • trainer_id
  • starts_at
SQL
CREATE INDEX idx_bookings_trainer_date
ON bookings(trainer_id, starts_at)
Drop