193 lines
5.8 KiB
SQL
193 lines
5.8 KiB
SQL
-- ============================================
|
|
-- ANTRAGSIDEEN HAGEN - Relationales Schema
|
|
-- Version: 2.0
|
|
-- Erstellt: 2026-03-06
|
|
-- ============================================
|
|
|
|
PRAGMA foreign_keys = ON;
|
|
|
|
-- ============================================
|
|
-- STAMMDATEN
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS prioritaeten (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT UNIQUE NOT NULL,
|
|
reihenfolge INTEGER,
|
|
farbe TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS status_typen (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT UNIQUE NOT NULL,
|
|
reihenfolge INTEGER,
|
|
farbe TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS bereiche (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT UNIQUE NOT NULL,
|
|
kuerzel TEXT,
|
|
farbe TEXT,
|
|
icon TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ausschuesse (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT UNIQUE NOT NULL,
|
|
kuerzel TEXT,
|
|
farbe TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS personen (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
rolle TEXT,
|
|
email TEXT,
|
|
telefon TEXT
|
|
);
|
|
|
|
-- ============================================
|
|
-- HAUPTTABELLE
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS antraege (
|
|
id INTEGER PRIMARY KEY,
|
|
titel TEXT NOT NULL,
|
|
kurzbeschreibung TEXT,
|
|
|
|
prioritaet_id INTEGER REFERENCES prioritaeten(id),
|
|
status_id INTEGER REFERENCES status_typen(id),
|
|
bereich_id INTEGER REFERENCES bereiche(id),
|
|
|
|
dossier TEXT,
|
|
antragstext TEXT,
|
|
|
|
omnifocus_projekt TEXT,
|
|
referenzen TEXT,
|
|
kontakte TEXT,
|
|
notizen TEXT,
|
|
allris_referenzen TEXT,
|
|
|
|
position_x REAL,
|
|
position_y REAL,
|
|
|
|
erstellt_am DATE DEFAULT (date('now')),
|
|
aktualisiert_am DATE DEFAULT (date('now'))
|
|
);
|
|
|
|
-- ============================================
|
|
-- VERKNÜPFUNGEN
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS antrag_ausschuesse (
|
|
antrag_id INTEGER REFERENCES antraege(id) ON DELETE CASCADE,
|
|
ausschuss_id INTEGER REFERENCES ausschuesse(id) ON DELETE CASCADE,
|
|
ist_federfuehrend INTEGER DEFAULT 0,
|
|
PRIMARY KEY (antrag_id, ausschuss_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS antrag_personen (
|
|
antrag_id INTEGER REFERENCES antraege(id) ON DELETE CASCADE,
|
|
person_id INTEGER REFERENCES personen(id) ON DELETE CASCADE,
|
|
rolle TEXT,
|
|
PRIMARY KEY (antrag_id, person_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS verbindungen (
|
|
id INTEGER PRIMARY KEY,
|
|
von_antrag_id INTEGER REFERENCES antraege(id) ON DELETE CASCADE,
|
|
nach_antrag_id INTEGER REFERENCES antraege(id) ON DELETE CASCADE,
|
|
typ TEXT CHECK(typ IN ('manuell', 'thematisch', 'abhaengig', 'siehe_auch')),
|
|
gewicht INTEGER DEFAULT 1,
|
|
notiz TEXT,
|
|
erstellt_am DATE DEFAULT (date('now')),
|
|
UNIQUE(von_antrag_id, nach_antrag_id)
|
|
);
|
|
|
|
-- ============================================
|
|
-- KOMMUNIKATION
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS kommunikation (
|
|
id INTEGER PRIMARY KEY,
|
|
antrag_id INTEGER REFERENCES antraege(id) ON DELETE CASCADE,
|
|
typ TEXT CHECK(typ IN ('Pressemitteilung', 'Instagram', 'Facebook', 'Twitter', 'Website')),
|
|
titel TEXT NOT NULL,
|
|
inhalt TEXT,
|
|
zielgruppe TEXT,
|
|
status TEXT CHECK(status IN ('Entwurf', 'Review', 'Freigegeben', 'Veröffentlicht')),
|
|
erstellt_am DATE DEFAULT (date('now')),
|
|
veroeffentlicht_am DATE
|
|
);
|
|
|
|
-- ============================================
|
|
-- VIEW-KONFIGURATIONEN
|
|
-- ============================================
|
|
|
|
CREATE TABLE IF NOT EXISTS view_configs (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
typ TEXT CHECK(typ IN ('graph', 'table', 'kanban', 'timeline')),
|
|
config TEXT,
|
|
ist_default INTEGER DEFAULT 0,
|
|
erstellt_am DATE DEFAULT (date('now'))
|
|
);
|
|
|
|
-- ============================================
|
|
-- INDIZES
|
|
-- ============================================
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_antraege_prioritaet ON antraege(prioritaet_id);
|
|
CREATE INDEX IF NOT EXISTS idx_antraege_status ON antraege(status_id);
|
|
CREATE INDEX IF NOT EXISTS idx_antraege_bereich ON antraege(bereich_id);
|
|
CREATE INDEX IF NOT EXISTS idx_verbindungen_von ON verbindungen(von_antrag_id);
|
|
CREATE INDEX IF NOT EXISTS idx_verbindungen_nach ON verbindungen(nach_antrag_id);
|
|
CREATE INDEX IF NOT EXISTS idx_kommunikation_antrag ON kommunikation(antrag_id);
|
|
|
|
-- ============================================
|
|
-- STAMMDATEN EINFÜGEN
|
|
-- ============================================
|
|
|
|
INSERT OR IGNORE INTO prioritaeten (id, name, reihenfolge, farbe) VALUES
|
|
(1, 'Hoch', 1, '#E53935'),
|
|
(2, 'Mittel', 2, '#FB8C00'),
|
|
(3, 'Niedrig', 3, '#43A047'),
|
|
(4, 'Abgeschlossen', 4, '#78909C');
|
|
|
|
INSERT OR IGNORE INTO status_typen (id, name, reihenfolge, farbe) VALUES
|
|
(1, 'Ideenspeicher', 1, '#90CAF9'),
|
|
(2, 'Recherche', 2, '#FFF59D'),
|
|
(3, 'Entwurf', 3, '#FFCC80'),
|
|
(4, 'Eingereicht', 4, '#A5D6A7'),
|
|
(5, 'Beschlossen', 5, '#81C784'),
|
|
(6, 'Abgelehnt', 6, '#EF9A9A'),
|
|
(7, 'Abgeschlossen', 7, '#B0BEC5');
|
|
|
|
INSERT OR IGNORE INTO bereiche (id, name, kuerzel, farbe, icon) VALUES
|
|
(1, 'Umwelt', 'UMW', '#4CAF50', '🌿'),
|
|
(2, 'Infra', 'INF', '#2196F3', '🚗'),
|
|
(3, 'HFA', 'HFA', '#FFC107', '💰'),
|
|
(4, 'Soziales', 'SOZ', '#E91E63', '🤝'),
|
|
(5, 'Stadt', 'STD', '#9C27B0', '🏙️'),
|
|
(6, 'Wirtschaft', 'WIR', '#FF5722', '💼');
|
|
|
|
INSERT OR IGNORE INTO ausschuesse (id, name, kuerzel) VALUES
|
|
(1, 'Umweltausschuss', 'UKM'),
|
|
(2, 'Infrastrukturausschuss', 'IFA'),
|
|
(3, 'Haupt- und Finanzausschuss', 'HFA'),
|
|
(4, 'Stadtentwicklungsausschuss', 'STA'),
|
|
(5, 'Sozialausschuss', 'SOZ'),
|
|
(6, 'Wirtschaftsausschuss', 'WIA'),
|
|
(7, 'Sport- und Freizeitausschuss', 'SPO'),
|
|
(8, 'Schulausschuss', 'SCH'),
|
|
(9, 'Ausschuss für Bürgerbeteiligung', 'BÜR');
|
|
|
|
INSERT OR IGNORE INTO personen (id, name, rolle) VALUES
|
|
(1, 'Rüdiger Ludwig', 'Vorsitz Umweltausschuss'),
|
|
(2, 'Heike Heuer', 'Infrastruktur'),
|
|
(3, 'Jörg Fritzsche', 'HFA / Digitales'),
|
|
(4, 'Karin Köppen', 'Soziales'),
|
|
(5, 'Daniel Adam', 'Bürgerbeteiligung'),
|
|
(6, 'Nicole Pfefferer', 'Schule');
|