SQL
CREATE TABLE invoices (
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,
invoice_no TEXT NOT NULL,
-- z. B. "2026-0042" — fortlaufend pro Trainer
category TEXT NOT NULL,
-- 'lesson' | 'card' | 'video' | 'bulk'
lines TEXT NOT NULL,
-- JSON: [{ service,
when,
gross_cents }]
total_cents INTEGER NOT NULL,
status TEXT NOT NULL DEFAULT 'open',
-- 'open' | 'paid' | 'cancelled'
issued_at TEXT NOT NULL DEFAULT (datetime('now')),
paid_at TEXT,
archived_at TIMESTAMP NULL
)
Columns
| Column | Data type | Allow null | Primary key | Actions |
|---|---|---|---|---|
id |
INTEGER |
✓ | ✓ | Rename | Drop |
trainer_id |
INTEGER |
Rename | Drop | ||
student_id |
INTEGER |
Rename | Drop | ||
invoice_no |
TEXT |
Rename | Drop | ||
category |
TEXT |
Rename | Drop | ||
lines |
TEXT |
Rename | Drop | ||
total_cents |
INTEGER |
Rename | Drop | ||
status |
TEXT |
Rename | Drop | ||
issued_at |
TEXT |
Rename | Drop | ||
paid_at |
TEXT |
✓ | Rename | Drop | |
archived_at |
TIMESTAMP |
✓ | Rename | Drop |
Foreign Keys
| Column | Destination |
|---|---|
student_id |
students.id |
trainer_id |
trainers.id |
Indexes
| Name | Columns | Unique | SQL | Drop? |
|---|---|---|---|---|
| idx_invoices_archived |
|
SQL | Drop | |
| idx_invoices_no |
|
✓ | SQL | Drop |
| idx_invoices_student |
student_id
|
SQL | Drop | |
| idx_invoices_trainer |
trainer_id
|
SQL | Drop |