Quelltext des aktuellen Standes
-- Quittierte und verschobene Fristen.
--
-- Fristen entstehen abgeleitet aus anderen Modulen und haben keine eigene
-- Zeile. Eine Entscheidung haengt deshalb am Tripel aus Quelle, Objekt und
-- dem konkreten Faelligkeitsdatum: Verschiebt sich das Datum spaeter, ist es
-- eine neue Frist und braucht eine neue Entscheidung.
CREATE TABLE IF NOT EXISTS `deadline_actions` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`source` VARCHAR(40) NOT NULL,
`object_id` INT NOT NULL,
`due_date` DATE NOT NULL,
`action` ENUM('acknowledged','postponed') NOT NULL,
-- Nur beim Verschieben gesetzt: das neue Datum.
`postponed_to` DATE NULL,
`note` VARCHAR(500) NULL,
-- Passt zu `users`.`id`; ein abweichender Typ laesst den Fremdschluessel scheitern.
`created_by` BIGINT UNSIGNED NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `uniq_frist` (`source`, `object_id`, `due_date`),
KEY `idx_quelle` (`source`, `object_id`),
CONSTRAINT `fk_deadline_actions_user`
FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;