OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

221_page_object_links.sql

2 KB
-- ============================================================
-- 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;