OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

219_license_assignments.sql

2 KB
-- ============================================================
-- Lizenzen: wer belegt welchen Platz
-- ============================================================
-- Bisher war die Belegung einer Lizenz eine gepflegte Zahl (`seats_used`) ohne
-- Bezug dazu, wer die Plätze tatsächlich hält. Diese Tabelle stellt den Bezug
-- her: je Zuordnung ein Gerät oder eine Person aus dem Verzeichnis.
--
-- `seats_used` bleibt bewusst unangetastet:
--   * Bei Lizenzen aus dem Microsoft-365-Abgleich gehört der Wert der Quelle
--     und wird bei jedem Lauf überschrieben.
--   * Bei selbst gepflegten Lizenzen steht dort ein über die Zeit gepflegter
--     Wert, der beim Update nicht stillschweigend auf null fallen soll.
-- Die Oberfläche stellt beide Zahlen nebeneinander und bietet bei selbst
-- gepflegten Lizenzen an, die gepflegte Zahl aus den Zuordnungen zu setzen.

CREATE TABLE IF NOT EXISTS `license_assignments` (
    `id`           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `license_id`   INT UNSIGNED NOT NULL,
    `subject_type` ENUM('asset','person') NOT NULL COMMENT 'Gerät oder Verzeichnis-Person',
    `subject_id`   INT UNSIGNED NOT NULL,
    `note`         VARCHAR(255) NULL,
    `assigned_at`  DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `assigned_by`  INT UNSIGNED NULL,

    -- Dieselbe Lizenz zweimal an dasselbe Ziel ergibt keinen zweiten Platz.
    UNIQUE KEY `uq_license_subject` (`license_id`, `subject_type`, `subject_id`),
    INDEX `idx_la_subject` (`subject_type`, `subject_id`),

    CONSTRAINT `fk_la_license` FOREIGN KEY (`license_id`) REFERENCES `licenses`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;