Datenbank-Schema

Tabellenstruktur des KI-Task-Management Systems in der Datenbank ki_protokoll.

Datenbankki_protokoll
Tabellen4 (tasks, task_assignments, task_results, task_comments)
EngineInnoDB
Charsetutf8mb4_unicode_ci

tasks

Haupttabelle für alle Tasks.

SpalteTypBeschreibung
idBIGINT UNSIGNEDPrimary Key, Auto-Increment
uuidVARCHAR(36)Unique Identifier
titleVARCHAR(255)Titel des Tasks
descriptionTEXTBeschreibung
typeENUM'human_task', 'ai_task', 'mixed'
statusENUM'pending', 'in_progress', 'completed', 'failed', 'cancelled'
created_byVARCHAR(100)Ersteller
created_by_typeENUM'human', 'ai'
parent_task_idBIGINT UNSIGNEDFK zu übergeordnetem Task
due_dateDATETIMEFälligkeitsdatum
created_atDATETIME(6)Erstellungszeitpunkt
updated_atDATETIME(6)Letzte Änderung
completed_atDATETIME(6)Abschlusszeitpunkt
metadataJSONZusätzliche Daten

Indizes

PRIMARY KEY (id)
UNIQUE KEY uk_uuid (uuid)
KEY idx_status (status)
KEY idx_created_by (created_by)
KEY idx_type (type)
KEY idx_parent_task (parent_task_id)
KEY idx_created_at (created_at)

SQL

CREATE TABLE tasks (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    uuid VARCHAR(36) NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    type ENUM('human_task', 'ai_task', 'mixed') NOT NULL DEFAULT 'human_task',
    status ENUM('pending', 'in_progress', 'completed', 'failed', 'cancelled') NOT NULL DEFAULT 'pending',
    created_by VARCHAR(100) NOT NULL,
    created_by_type ENUM('human', 'ai') NOT NULL DEFAULT 'human',
    parent_task_id BIGINT UNSIGNED NULL,
    due_date DATETIME NULL,
    created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    completed_at DATETIME(6) NULL,
    metadata JSON,
    PRIMARY KEY (id),
    UNIQUE KEY uk_uuid (uuid),
    CONSTRAINT fk_parent_task FOREIGN KEY (parent_task_id) REFERENCES tasks(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

task_assignments

Zuweisungen von Tasks an Bearbeiter.

SpalteTypBeschreibung
idBIGINT UNSIGNEDPrimary Key
task_idBIGINT UNSIGNEDFK zu tasks
assigneeVARCHAR(100)Bearbeiter-Name
assignee_typeENUM'human', 'ollama', 'claude', 'anthropic_api'
model_nameVARCHAR(100)KI-Model (z.B. mistral)
assigned_byVARCHAR(100)Zuweisender
assigned_by_typeENUM'human', 'ai'
statusENUM'pending', 'accepted', 'rejected', 'in_progress', 'completed'
assigned_atDATETIME(6)Zuweisungszeitpunkt
accepted_atDATETIME(6)Annahmezeitpunkt
completed_atDATETIME(6)Abschlusszeitpunkt
notesTEXTNotizen

SQL

CREATE TABLE task_assignments (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    task_id BIGINT UNSIGNED NOT NULL,
    assignee VARCHAR(100) NOT NULL,
    assignee_type ENUM('human', 'ollama', 'claude', 'anthropic_api') NOT NULL,
    model_name VARCHAR(100) NULL,
    assigned_by VARCHAR(100) NOT NULL,
    assigned_by_type ENUM('human', 'ai') NOT NULL DEFAULT 'human',
    status ENUM('pending', 'accepted', 'rejected', 'in_progress', 'completed') NOT NULL DEFAULT 'pending',
    assigned_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    accepted_at DATETIME(6) NULL,
    completed_at DATETIME(6) NULL,
    notes TEXT,
    PRIMARY KEY (id),
    CONSTRAINT fk_assignment_task FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

task_results

Ergebnisse von Task-Ausführungen mit Token-Tracking.

SpalteTypBeschreibung
idBIGINT UNSIGNEDPrimary Key
task_idBIGINT UNSIGNEDFK zu tasks
assignment_idBIGINT UNSIGNEDFK zu task_assignments
executorVARCHAR(100)Ausführender
executor_typeENUM'human', 'ollama', 'claude', 'anthropic_api'
model_nameVARCHAR(100)KI-Model
requestTEXTEingabe/Prompt
responseLONGTEXTAusgabe/Antwort
request_timestampDATETIME(6)Request-Zeitpunkt
response_timestampDATETIME(6)Response-Zeitpunkt
duration_msINT UNSIGNEDDauer in Millisekunden
tokens_inputINT UNSIGNEDInput-Tokens
tokens_outputINT UNSIGNEDOutput-Tokens
tokens_totalINT UNSIGNEDGesamt-Tokens
cost_usdDECIMAL(10,6)Kosten in USD
statusENUM'success', 'error', 'partial'
error_messageTEXTFehlermeldung
created_atDATETIME(6)Erstellungszeitpunkt

SQL

CREATE TABLE task_results (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    task_id BIGINT UNSIGNED NOT NULL,
    assignment_id BIGINT UNSIGNED NULL,
    executor VARCHAR(100) NOT NULL,
    executor_type ENUM('human', 'ollama', 'claude', 'anthropic_api') NOT NULL,
    model_name VARCHAR(100) NULL,
    request TEXT,
    response LONGTEXT,
    request_timestamp DATETIME(6) NOT NULL,
    response_timestamp DATETIME(6) NULL,
    duration_ms INT UNSIGNED NULL,
    tokens_input INT UNSIGNED NULL,
    tokens_output INT UNSIGNED NULL,
    tokens_total INT UNSIGNED NULL,
    cost_usd DECIMAL(10,6) NULL,
    status ENUM('success', 'error', 'partial') NOT NULL DEFAULT 'success',
    error_message TEXT NULL,
    created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    PRIMARY KEY (id),
    CONSTRAINT fk_result_task FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
    CONSTRAINT fk_result_assignment FOREIGN KEY (assignment_id) REFERENCES task_assignments(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

task_comments

Kommentare und Protokoll-Einträge zu Tasks.

SpalteTypBeschreibung
idBIGINT UNSIGNEDPrimary Key
task_idBIGINT UNSIGNEDFK zu tasks
authorVARCHAR(100)Autor
author_typeENUM'human', 'ai', 'system'
comment_typeENUM'comment', 'status_change', 'assignment', 'result', 'note'
contentTEXTInhalt
metadataJSONZusätzliche Daten
created_atDATETIME(6)Erstellungszeitpunkt

Abfragen

Letzte 10 Tasks

SELECT id, title, status, created_at
FROM tasks
ORDER BY id DESC
LIMIT 10;

Tasks nach Status

SELECT status, COUNT(*) as count
FROM tasks
GROUP BY status;

Token-Verbrauch pro Model

SELECT model_name,
       SUM(tokens_total) as total_tokens,
       SUM(cost_usd) as total_cost,
       COUNT(*) as executions
FROM task_results
WHERE model_name IS NOT NULL
GROUP BY model_name
ORDER BY total_tokens DESC;

Durchschnittliche Dauer pro Executor

SELECT executor_type,
       AVG(duration_ms) as avg_duration,
       COUNT(*) as count
FROM task_results
GROUP BY executor_type;

Task-Historie

SELECT tc.created_at, tc.author, tc.comment_type, tc.content
FROM task_comments tc
WHERE tc.task_id = 1
ORDER BY tc.created_at DESC;