46 lines
2 KiB
SQL
46 lines
2 KiB
SQL
/******************************************************************************
|
|
* Schéma SQLite V14 — affectations contextuelles multiples des personnes.
|
|
*
|
|
* L'unicité porte sur (personne, rôle, preuve, provenance) : un même rôle
|
|
* peut donc être justifié par plusieurs preuves distinctes.
|
|
******************************************************************************/
|
|
CREATE TABLE person_role_assignments
|
|
(
|
|
id TEXT PRIMARY KEY CHECK (length(trim(id)) > 0),
|
|
entity_id TEXT NOT NULL,
|
|
role_code TEXT NOT NULL CHECK (length(trim(role_code)) > 0),
|
|
evidence_id TEXT,
|
|
provenance_kind TEXT NOT NULL CHECK (
|
|
provenance_kind IN ('manual', 'legacy_manual')
|
|
),
|
|
confidence INTEGER CHECK (
|
|
confidence IS NULL OR confidence BETWEEN 0 AND 100
|
|
),
|
|
notes TEXT,
|
|
created_at TEXT NOT NULL CHECK (length(created_at) = 20),
|
|
updated_at TEXT NOT NULL CHECK (length(updated_at) = 20),
|
|
FOREIGN KEY (entity_id) REFERENCES entites(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (evidence_id) REFERENCES preuves(id) ON DELETE SET NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX idx_person_role_assignments_semantic
|
|
ON person_role_assignments(
|
|
entity_id, role_code, COALESCE(evidence_id, ''), provenance_kind
|
|
);
|
|
CREATE INDEX idx_person_role_assignments_entity
|
|
ON person_role_assignments(entity_id);
|
|
CREATE INDEX idx_person_role_assignments_evidence
|
|
ON person_role_assignments(evidence_id);
|
|
|
|
/* Les codes historiques sont conservés littéralement : aucune équivalence
|
|
* approximative n'est appliquée pendant la migration. */
|
|
INSERT INTO person_role_assignments(
|
|
id, entity_id, role_code, evidence_id, provenance_kind,
|
|
confidence, notes, created_at, updated_at
|
|
)
|
|
SELECT
|
|
lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' ||
|
|
substr(lower(hex(randomblob(2))),2) || '-a' ||
|
|
substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6))),
|
|
entity_id, role, NULL, 'legacy_manual', NULL, NULL, updated_at, updated_at
|
|
FROM person_roles;
|