-- Les biens : appartements, maisons, mobil-homes.
--
-- Aucune colonne concierge_id ici, volontairement. Un bien releve de ses
-- PROPRIETAIRES, et le concierge s'en deduit par leur rattachement
-- (utilisateurs.concierge_id). Dupliquer l'information sur le bien creerait deux
-- verites a maintenir, qui divergeraient au premier changement de concierge.
-- Le cout est une jointure de plus a la lecture ; le benefice, une seule source.
--
-- actif = 0 pour la desactivation, jamais de suppression : les reservations et le
-- journal d'audit referenceront ce bien pendant des annees. Meme regle que pour
-- les comptes, et pour la meme raison.

CREATE TABLE biens (
    id            BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    reference     CHAR(26)        NOT NULL,
    nom           VARCHAR(120)    NOT NULL,
    type          ENUM('appartement','maison','mobil_home') NOT NULL,

    -- Adresse eclatee plutot qu'un bloc de texte : la ville et le code postal
    -- serviront a regrouper et a filtrer, ce qu'un champ libre interdirait.
    niveau        VARCHAR(60)     NULL,
    adresse       VARCHAR(190)    NOT NULL,
    code_postal   VARCHAR(12)     NOT NULL,
    ville         VARCHAR(120)    NOT NULL,

    -- Tout ce qui ne rentre dans aucune colonne : acces, code de boite a cles,
    -- consignes de stationnement, particularites.
    details       TEXT            NULL,

    -- DECIMAL et non FLOAT : une surface se compare et s'additionne, un flottant
    -- binaire y introduirait des ecarts sur des valeurs pourtant decimales.
    surface_m2    DECIMAL(7,2)    UNSIGNED NULL,
    capacite_max  SMALLINT        UNSIGNED NULL,

    actif         TINYINT(1)      NOT NULL DEFAULT 1,
    desactive_le  DATETIME        NULL,
    desactive_par BIGINT UNSIGNED NULL,
    cree_par      BIGINT UNSIGNED NULL,
    cree_le       DATETIME        NOT NULL,
    modifie_le    DATETIME        NOT NULL,

    PRIMARY KEY (id),
    UNIQUE KEY uq_biens_reference (reference),
    KEY idx_biens_actif_nom (actif, nom),
    KEY idx_biens_ville (ville, nom),

    CONSTRAINT fk_biens_cree_par
        FOREIGN KEY (cree_par) REFERENCES utilisateurs (id) ON DELETE SET NULL,
    CONSTRAINT fk_biens_desactive_par
        FOREIGN KEY (desactive_par) REFERENCES utilisateurs (id) ON DELETE SET NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
