-- ===================================================================== -- aether-police — Datenbankschema -- -- Einspielen: mysql -u root -p aether < sql/aether_police.sql -- -- Hinweis zum Grundprinzip: Keine dieser Tabellen enthaelt Automatismen. -- Fristen (z. B. Haftzeit) werden nur MITGEFUEHRT, damit das System -- erinnern kann. Ausgefuehrt wird ausschliesslich durch einen Beamten — -- erkennbar an den Feldern `entlassen_von` / `entlassen_am`. -- ===================================================================== USE `aether`; -- --------------------------------------------------------------------- -- Personal: Zugehoerigkeit, Rolle und individuelle Rechte -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_personal` ( `character` INT UNSIGNED NOT NULL COMMENT 'Charakter aus aether_characters', `dienstnummer` VARCHAR(16) NOT NULL COMMENT 'Dienstnummer, z. B. LSPD-0421', `rolle` VARCHAR(32) NOT NULL DEFAULT 'anwaerter', `abteilung` VARCHAR(32) NOT NULL DEFAULT 'streife' COMMENT 'streife/kripo/verkehr/sek/leitstelle', `rechte_extra` LONGTEXT DEFAULT NULL COMMENT 'Zusaetzlich gewaehrte Rechte als JSON-Array', `rechte_entzug` LONGTEXT DEFAULT NULL COMMENT 'Einzeln entzogene Rechte als JSON-Array', `eingestellt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `aktiv` TINYINT(1) NOT NULL DEFAULT 1, `notiz` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`character`), UNIQUE KEY `uniq_dienstnummer` (`dienstnummer`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Dienstzeiten (nur Protokoll, keine Auswertung zur Bewertung) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_dienst` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED NOT NULL, `beginn` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `ende` DATETIME DEFAULT NULL, `sekunden` INT NOT NULL DEFAULT 0, `abteilung` VARCHAR(32) NOT NULL DEFAULT 'streife', PRIMARY KEY (`id`), KEY `idx_character` (`character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Personenakten — Stammdaten der Polizei zu einer Person -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_person` ( `character` INT UNSIGNED NOT NULL, `lichtbild` LONGTEXT DEFAULT NULL COMMENT 'Bild-URL oder Data-URI', `fingerabdruck` VARCHAR(64) DEFAULT NULL, `dna` VARCHAR(64) DEFAULT NULL, `warnhinweis` VARCHAR(255) DEFAULT NULL COMMENT 'z. B. gewaltbereit, bewaffnet', `gefahrenstufe` TINYINT NOT NULL DEFAULT 0 COMMENT '0 = keine, 3 = hoch', `aktualisiert` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Akten (Straf-, Ermittlungs-, Einsatz-, Unfallakte, Vernehmung ...) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_akte` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `aktenzeichen` VARCHAR(32) NOT NULL, `typ` VARCHAR(24) NOT NULL COMMENT 'straf/ermittlung/einsatz/unfall/vernehmung/beschluss', `titel` VARCHAR(160) NOT NULL, `status` VARCHAR(24) NOT NULL DEFAULT 'offen' COMMENT 'offen/pruefung/geschlossen', `inhalt` LONGTEXT DEFAULT NULL, `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `freigabe_von` INT UNSIGNED DEFAULT NULL COMMENT 'Wer hat freigegeben (nie automatisch)', `freigabe_am` DATETIME DEFAULT NULL, `version` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `uniq_az` (`aktenzeichen`), KEY `idx_typ` (`typ`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Versionshistorie jeder Akte (Dokumentenverwaltung) CREATE TABLE IF NOT EXISTS `police_akte_version` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `akte` INT UNSIGNED NOT NULL, `version` INT NOT NULL, `inhalt` LONGTEXT DEFAULT NULL, `geaendert_von` INT UNSIGNED NOT NULL, `geaendert_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `grund` VARCHAR(255) DEFAULT NULL COMMENT 'Warum wurde geaendert', PRIMARY KEY (`id`), KEY `idx_akte` (`akte`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Verknuepfungen: Akte <-> Person / Fahrzeug / Beweis / Einsatz CREATE TABLE IF NOT EXISTS `police_verknuepfung` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `akte` INT UNSIGNED NOT NULL, `typ` VARCHAR(16) NOT NULL COMMENT 'person/fahrzeug/beweis/einsatz/bericht', `ziel_id` VARCHAR(64) NOT NULL COMMENT 'ID oder Kennzeichen des Ziels', `rolle` VARCHAR(32) DEFAULT NULL COMMENT 'beschuldigt/zeuge/geschaedigt/beteiligt', `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_akte` (`akte`), KEY `idx_ziel` (`typ`, `ziel_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Anzeigen — erfasste Delikte. Immer von einem Beamten bestaetigt. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_anzeige` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `akte` INT UNSIGNED DEFAULT NULL, `beschuldigter` INT UNSIGNED NOT NULL, `delikte` LONGTEXT NOT NULL COMMENT 'JSON: [{id,name,haft,geld,paragraph}]', `haft_empfohlen` INT NOT NULL DEFAULT 0 COMMENT 'Vorschlag des Katalogs (Minuten)', `geld_empfohlen` INT NOT NULL DEFAULT 0 COMMENT 'Vorschlag des Katalogs', `haft_final` INT NOT NULL DEFAULT 0 COMMENT 'Vom Beamten festgelegt', `geld_final` INT NOT NULL DEFAULT 0 COMMENT 'Vom Beamten festgelegt', `begruendung` VARCHAR(512) DEFAULT NULL COMMENT 'Pflicht bei Abweichung vom Vorschlag', `status` VARCHAR(16) NOT NULL DEFAULT 'entwurf' COMMENT 'entwurf/bestaetigt/verworfen', `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `bestaetigt_von` INT UNSIGNED DEFAULT NULL, `bestaetigt_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_beschuldigter` (`beschuldigter`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Gewahrsam — reine Fristenverwaltung, KEINE automatische Entlassung -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_gewahrsam` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED NOT NULL, `anzeige` INT UNSIGNED DEFAULT NULL, `haft_minuten` INT NOT NULL COMMENT 'Vom Beamten festgelegte Dauer', `beginn` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `faellig_am` DATETIME NOT NULL COMMENT 'Ab hier erinnert das System nur', `grund` VARCHAR(512) NOT NULL DEFAULT '', `zelle` VARCHAR(32) DEFAULT NULL, `eingewiesen_von` INT UNSIGNED NOT NULL, -- Entlassung geschieht ausschliesslich manuell: `entlassen_von` INT UNSIGNED DEFAULT NULL, `entlassen_am` DATETIME DEFAULT NULL, `entlass_grund` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_character` (`character`), KEY `idx_offen` (`entlassen_am`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Einsaetze und Dispatch -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_einsatz` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `nummer` VARCHAR(24) NOT NULL COMMENT 'Einsatznummer', `titel` VARCHAR(160) NOT NULL, `kategorie` VARCHAR(32) NOT NULL DEFAULT 'sonstiges', `prioritaet` TINYINT NOT NULL DEFAULT 3 COMMENT '1 = hoechste', `ort` VARCHAR(160) DEFAULT NULL, `pos_x` FLOAT DEFAULT NULL, `pos_y` FLOAT DEFAULT NULL, `pos_z` FLOAT DEFAULT NULL, `beschreibung` TEXT DEFAULT NULL, `status` VARCHAR(24) NOT NULL DEFAULT 'offen' COMMENT 'offen/zugewiesen/vorort/abgeschlossen', `quelle` VARCHAR(32) NOT NULL DEFAULT 'manuell' COMMENT 'manuell/notruf/panik/extern', `erstellt_von` INT UNSIGNED DEFAULT NULL COMMENT 'NULL bei eingehendem Notruf', `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `geschlossen_von` INT UNSIGNED DEFAULT NULL, `geschlossen_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_nummer` (`nummer`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `police_einsatz_beamter` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `einsatz` INT UNSIGNED NOT NULL, `character` INT UNSIGNED NOT NULL, `beigetreten` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `verlassen` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_einsatz` (`einsatz`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `police_einsatz_notiz` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `einsatz` INT UNSIGNED NOT NULL, `text` VARCHAR(1000) NOT NULL, `von` INT UNSIGNED NOT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_einsatz` (`einsatz`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Fahndungen — immer manuell angelegt -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_fahndung` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `typ` VARCHAR(16) NOT NULL DEFAULT 'person' COMMENT 'person/fahrzeug', `ziel_id` VARCHAR(64) NOT NULL COMMENT 'Charakter-ID oder Kennzeichen', `bezeichnung` VARCHAR(160) NOT NULL, `grund` VARCHAR(512) NOT NULL, `gefahr` VARCHAR(24) NOT NULL DEFAULT 'normal' COMMENT 'normal/bewaffnet/gefaehrlich', `prioritaet` TINYINT NOT NULL DEFAULT 3, `hinweise` TEXT DEFAULT NULL, `bild` LONGTEXT DEFAULT NULL, `aktiv` TINYINT(1) NOT NULL DEFAULT 1, `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `aufgehoben_von` INT UNSIGNED DEFAULT NULL, `aufgehoben_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_ziel` (`typ`, `ziel_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Beweise -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_beweis` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(32) NOT NULL COMMENT 'Beweismittelnummer', `akte` INT UNSIGNED DEFAULT NULL, `art` VARCHAR(24) NOT NULL COMMENT 'foto/video/fingerabdruck/dna/huelse/dokument/aussage/gegenstand', `bezeichnung` VARCHAR(160) NOT NULL, `beschreibung` TEXT DEFAULT NULL, `fundort` VARCHAR(160) DEFAULT NULL, `gefunden_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `datei` LONGTEXT DEFAULT NULL COMMENT 'Bild-/Video-URL', `erfasst_von` INT UNSIGNED NOT NULL, `erfasst_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`), KEY `idx_akte` (`akte`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Asservatenkammer -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_asservat` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(32) NOT NULL, `kategorie` VARCHAR(24) NOT NULL COMMENT 'waffe/drogen/bargeld/schmuck/datentraeger/dokument/sonstiges', `bezeichnung` VARCHAR(160) NOT NULL, `menge` VARCHAR(48) DEFAULT NULL, `lagerort` VARCHAR(64) NOT NULL DEFAULT 'Asservatenkammer A', `verantwortlich` INT UNSIGNED NOT NULL, `akte` INT UNSIGNED DEFAULT NULL, `beweis` INT UNSIGNED DEFAULT NULL, `status` VARCHAR(24) NOT NULL DEFAULT 'eingelagert' COMMENT 'eingelagert/ausgegeben/vernichtet/zurueckgegeben', `eingelagert_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `police_asservat_historie` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `asservat` INT UNSIGNED NOT NULL, `aktion` VARCHAR(48) NOT NULL, `von` INT UNSIGNED NOT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `notiz` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_asservat` (`asservat`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Dienstfahrzeuge -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_fahrzeug` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennzeichen` VARCHAR(16) NOT NULL, `modell` VARCHAR(48) NOT NULL, `bezeichnung` VARCHAR(64) NOT NULL, `abteilung` VARCHAR(32) NOT NULL DEFAULT 'streife', `zugewiesen_an` INT UNSIGNED DEFAULT NULL COMMENT 'Manuell zugewiesen', `letzter_fahrer` INT UNSIGNED DEFAULT NULL, `tank` FLOAT NOT NULL DEFAULT 100, `zustand` FLOAT NOT NULL DEFAULT 1000, `wartung` VARCHAR(24) NOT NULL DEFAULT 'ok' COMMENT 'ok/faellig/werkstatt', `status` VARCHAR(24) NOT NULL DEFAULT 'verfuegbar', `pos_x` FLOAT DEFAULT NULL, `pos_y` FLOAT DEFAULT NULL, `pos_z` FLOAT DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennzeichen` (`kennzeichen`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Berichte -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_bericht` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `nummer` VARCHAR(32) NOT NULL, `einsatz` INT UNSIGNED DEFAULT NULL, `akte` INT UNSIGNED DEFAULT NULL, `titel` VARCHAR(160) NOT NULL, `beschreibung` LONGTEXT DEFAULT NULL, `massnahmen` LONGTEXT DEFAULT NULL, `beteiligte` LONGTEXT DEFAULT NULL COMMENT 'JSON', `anlagen` LONGTEXT DEFAULT NULL COMMENT 'JSON', `status` VARCHAR(24) NOT NULL DEFAULT 'entwurf' COMMENT 'entwurf/eingereicht/freigegeben', `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `unterschriften` LONGTEXT DEFAULT NULL COMMENT 'JSON: wer hat unterschrieben', PRIMARY KEY (`id`), UNIQUE KEY `uniq_nummer` (`nummer`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Interne Kommunikation -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_nachricht` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `absender` INT UNSIGNED NOT NULL, `empfaenger` VARCHAR(64) NOT NULL COMMENT 'Charakter-ID, Abteilung oder "alle"', `empf_typ` VARCHAR(16) NOT NULL DEFAULT 'person' COMMENT 'person/abteilung/rundmeldung', `betreff` VARCHAR(160) DEFAULT NULL, `text` TEXT NOT NULL, `gelesen` TINYINT(1) NOT NULL DEFAULT 0, `gesendet` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_empfaenger` (`empfaenger`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Benachrichtigungen (Hinweise, Erinnerungen, Fristen) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_hinweis` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED DEFAULT NULL COMMENT 'NULL = an alle im Dienst', `kategorie` VARCHAR(32) NOT NULL COMMENT 'einsatz/fahndung/gewahrsam/bericht/akte/beweis/system', `prioritaet` VARCHAR(16) NOT NULL DEFAULT 'normal' COMMENT 'niedrig/normal/hoch/kritisch', `titel` VARCHAR(160) NOT NULL, `text` VARCHAR(512) DEFAULT NULL, `ziel_typ` VARCHAR(24) DEFAULT NULL COMMENT 'Wohin springt ein Klick', `ziel_id` VARCHAR(64) DEFAULT NULL, `gelesen` TINYINT(1) NOT NULL DEFAULT 0, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_character` (`character`, `gelesen`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Protokollierung — wer, wann, was, warum -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_protokoll` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED DEFAULT NULL, `dienstnummer` VARCHAR(16) DEFAULT NULL, `modul` VARCHAR(32) NOT NULL, `aktion` VARCHAR(64) NOT NULL, `ziel_typ` VARCHAR(24) DEFAULT NULL, `ziel_id` VARCHAR(64) DEFAULT NULL, `details` LONGTEXT DEFAULT NULL COMMENT 'JSON: was genau geaendert wurde', `grund` VARCHAR(255) DEFAULT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_modul` (`modul`), KEY `idx_character` (`character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Strafenkatalog — vom Administrator pflegbar -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_katalog` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(24) NOT NULL, `kategorie` VARCHAR(48) NOT NULL, `bezeichnung` VARCHAR(160) NOT NULL, `paragraph` VARCHAR(48) DEFAULT NULL COMMENT 'Gesetzliche Grundlage', `haft` INT NOT NULL DEFAULT 0 COMMENT 'Empfehlung in Minuten', `geld` INT NOT NULL DEFAULT 0 COMMENT 'Empfehlung in Euro', `hinweis` VARCHAR(512) DEFAULT NULL, `aktiv` TINYINT(1) NOT NULL DEFAULT 1, `sortierung` INT NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Systemeinstellungen (aktive Module, Vorlagen, Kategorien) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_einstellung` ( `schluessel` VARCHAR(64) NOT NULL, `wert` LONGTEXT DEFAULT NULL, PRIMARY KEY (`schluessel`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Notizen zu einer Person (kurze Vermerke ausserhalb einer Akte) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_person_notiz` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED NOT NULL COMMENT 'Betroffene Person', `text` VARCHAR(1000) NOT NULL, `von` INT UNSIGNED NOT NULL COMMENT 'Verfassender Beamter', `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_character` (`character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Lesestatus einer Nachricht je Empfaenger -- Noetig, weil Abteilungs- und Rundmeldungen viele Empfaenger haben. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_nachricht_gelesen` ( `nachricht` INT UNSIGNED NOT NULL, `character` INT UNSIGNED NOT NULL, `gelesen_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`nachricht`, `character`), CONSTRAINT `fk_nlesen_nachricht` FOREIGN KEY (`nachricht`) REFERENCES `police_nachricht` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Aushaenge und Dienstanweisungen -- Das System veroeffentlicht nichts von selbst und setzt nichts auf -- gelesen — die Kenntnisnahme bestaetigt jeder Beamte eigenhaendig. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_aushang` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `titel` VARCHAR(160) NOT NULL, `text` TEXT NOT NULL, `kategorie` VARCHAR(24) NOT NULL DEFAULT 'information' COMMENT 'anweisung/information/warnung', `abteilung` VARCHAR(32) DEFAULT NULL COMMENT 'NULL = gesamte Behoerde', `angeheftet` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Bleibt oben stehen', `kenntnispflicht` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Beamte sollen die Kenntnisnahme bestaetigen', `frist` DATETIME DEFAULT NULL COMMENT 'Bis wann erinnert das System an die Kenntnisnahme', `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Archivierung geschieht ausschliesslich manuell: `archiviert_von` INT UNSIGNED DEFAULT NULL, `archiviert_am` DATETIME DEFAULT NULL, `aktiv` TINYINT(1) NOT NULL DEFAULT 1, PRIMARY KEY (`id`), KEY `idx_aktiv` (`aktiv`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Bestaetigte Kenntnisnahmen zu einem Aushang -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `police_aushang_kenntnis` ( `aushang` INT UNSIGNED NOT NULL, `character` INT UNSIGNED NOT NULL, `bestaetigt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`aushang`, `character`), CONSTRAINT `fk_kenntnis_aushang` FOREIGN KEY (`aushang`) REFERENCES `police_aushang` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;