Quelltext des aktuellen Standes
-- ============================================================
-- Kennzahlen des Self-Service-Portals
-- ============================================================
-- Zwei Fragen ließen sich bisher nicht beantworten: Wie viele Meldungen
-- kommen über das Portal statt per Mail, und wie oft hat die Selbsthilfe
-- eine Meldung erübrigt. Beides braucht eine Aufzeichnung, die es noch
-- nicht gab – aus Nebenwirkungen erraten ist keine Kennzahl.
-- Die Herkunft eines Tickets war bisher nur aus Nebenwirkungen zu erschließen
-- (Mail-Kennung vorhanden, erfassender Benutzer gesetzt). Sie steht jetzt am
-- Ticket selbst.
ALTER TABLE `tickets`
ADD COLUMN `source` VARCHAR(20) NULL COMMENT 'portal, mail, backend, api';
-- Der Bestand wird aus denselben Merkmalen abgeleitet, aus denen sich die
-- Herkunft bisher erschließen ließ. Zustandsunabhängig: Ein zweiter Lauf
-- findet nichts mehr vor, was noch leer wäre.
UPDATE `tickets` SET `source` = 'mail'
WHERE `source` IS NULL AND `mail_message_id` IS NOT NULL AND `mail_message_id` <> '';
UPDATE `tickets` SET `source` = 'backend'
WHERE `source` IS NULL AND `created_by_user_id` IS NOT NULL;
UPDATE `tickets` SET `source` = 'portal'
WHERE `source` IS NULL AND `requester_person_id` IS NOT NULL;
-- Was keinem dieser Merkmale folgt, bleibt leer und zählt beim Auswerten als
-- unbekannt. Ein erfundener Wert wäre eine Aussage, die niemand belegen kann.
CREATE INDEX `idx_tickets_source` ON `tickets` (`source`, `created_at`);
-- Aufrufe der Selbsthilfe-Artikel. `context` hält fest, woher der Aufruf kam:
-- aus dem Hilfebereich oder aus den Vorschlägen während der Ticket-Eingabe.
-- Nur der zweite Fall lässt die Frage zu, ob die Meldung dadurch entfallen ist.
CREATE TABLE IF NOT EXISTS `portal_article_views` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`person_id` INT UNSIGNED NOT NULL,
`page_id` INT UNSIGNED NOT NULL,
`context` ENUM('help','ticket_form') NOT NULL DEFAULT 'help'
COMMENT 'help = Hilfebereich, ticket_form = Vorschlag beim Melden',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_article_view_seite` (`page_id`, `created_at`),
INDEX `idx_article_view_person` (`person_id`, `context`, `created_at`),
CONSTRAINT `fk_article_view_person` FOREIGN KEY (`person_id`)
REFERENCES `directory_persons` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;