Quelltext des aktuellen Standes
-- ============================================================
-- Dokuseiten mit Geräten, Verträgen und Diensten verknüpfen
-- ============================================================
-- Verknüpfungen zwischen Seiten kennt OpenNIT bereits (`page_links`). Diese
-- Tabelle ergänzt die Gegenrichtung zu den Modulen: eine Seite zeigt auf ein
-- Gerät, einen Vertrag oder einen Dienst – und von dort führt derselbe Eintrag
-- zurück auf die Seite.
--
-- Das Ziel liegt je nach Art in einer anderen Tabelle, deshalb trägt die
-- Zuordnung keinen Fremdschlüssel darauf. Verschwindet das Ziel, bleibt eine
-- Zeile ohne Gegenstück zurück; die Abfragen verbinden deshalb ausnahmslos per
-- INNER JOIN mit der Zieltabelle, sodass solche Zeilen weder in der Liste noch
-- in der Zählung auftauchen.
CREATE TABLE IF NOT EXISTS `page_object_links` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`page_id` BIGINT UNSIGNED NOT NULL,
`object_type` ENUM('asset','contract','service') NOT NULL,
`object_id` BIGINT UNSIGNED NOT NULL,
`created_by` BIGINT UNSIGNED NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- Dieselbe Seite zweimal an dasselbe Ziel ergibt keine zweite Verknüpfung.
UNIQUE KEY `uq_page_object` (`page_id`, `object_type`, `object_id`),
-- Für den Weg zurück: alle Seiten zu einem Gerät, Vertrag oder Dienst.
INDEX `idx_pol_object` (`object_type`, `object_id`),
CONSTRAINT `fk_pol_page` FOREIGN KEY (`page_id`) REFERENCES `pages`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;