-- Associations d'un bien : ses proprietaires et ses prestataires.
--
-- Deux tables de liaison et non deux colonnes : un bien peut avoir plusieurs
-- proprietaires (indivision, couple, SCI) et plusieurs prestataires (menage,
-- jardin, piscine). Ces tables sont aussi ce qui determine QUI voit le bien —
-- voir App\Domain\PorteeBiens.
--
-- Le role de l'utilisateur associe n'est pas contraignable par une cle etrangere.
-- Il est verifie a l'ecriture, dans BienRepository, ou la reference n'est resolue
-- que si elle designe bien un proprietaire (respectivement un prestataire). Une
-- contrainte CHECK ne peut pas interroger une autre table.
--
-- ON DELETE CASCADE ici, contrairement au reste de l'application : une ligne de
-- liaison n'a aucune existence propre. Si un bien ou un compte disparaissait, la
-- conserver ne documenterait rien.

CREATE TABLE bien_proprietaire (
    bien_id        BIGINT UNSIGNED NOT NULL,
    utilisateur_id BIGINT UNSIGNED NOT NULL,
    cree_le        DATETIME        NOT NULL,

    PRIMARY KEY (bien_id, utilisateur_id),

    -- Index inverse : sert la question « quels biens pour ce proprietaire ? »,
    -- qui est exactement celle du planning et de la portee d'un concierge.
    KEY idx_bien_proprietaire_inverse (utilisateur_id, bien_id),

    CONSTRAINT fk_bien_proprietaire_bien
        FOREIGN KEY (bien_id) REFERENCES biens (id) ON DELETE CASCADE,
    CONSTRAINT fk_bien_proprietaire_utilisateur
        FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs (id) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

CREATE TABLE bien_prestataire (
    bien_id        BIGINT UNSIGNED NOT NULL,
    utilisateur_id BIGINT UNSIGNED NOT NULL,
    cree_le        DATETIME        NOT NULL,

    PRIMARY KEY (bien_id, utilisateur_id),
    KEY idx_bien_prestataire_inverse (utilisateur_id, bien_id),

    CONSTRAINT fk_bien_prestataire_bien
        FOREIGN KEY (bien_id) REFERENCES biens (id) ON DELETE CASCADE,
    CONSTRAINT fk_bien_prestataire_utilisateur
        FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs (id) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
