Couche Bronze

La couche Bronze contient deux schémas de données distincts, chacun couvrant des aspects différents de la plateforme de télématique et d'intelligence d'affaires :

  • raw_business_data - contenant des tables, attributs et valeurs liés aux informations métier, telles que véhicules, employés, géorepères ajoutés par les utilisateurs, etc.

  • raw_telematics_data - contenant des tables, attributs et valeurs liés aux données télématiques transmises par les appareils sous surveillance, telles que les localisations, entrées, sorties et événements.

Chaque schéma est optimisé pour son domaine de données et ses modes d'accès spécifiques, offrant une couverture complète des besoins opérationnels, télématiques et de gestion des actifs.

raw_business_data structure

Ce schéma contient plus de 40 tables soigneusement sélectionnées pour couvrir divers aspects métier et cas d'utilisation. Ces tables représentent vos entités métier principales, la structure organisationnelle et les données opérationnelles.

Le diagramme interactif du schéma raw_business_data est disponible sur dbdiagram.io: https://dbdiagram.io/d/V3-bronze-layer-68ecfd1c2e68d21b4131089a

Trouvez les détails du schéma raw business data ci-dessous.

schéma raw_business_data

Fréquence de mise à jour

Les données de ce schéma sont synchronisées avec la base de données centrale. Les mises à jour se produisent de manière incrémentielle lorsque des modifications surviennent dans la base de données MySQL source, généralement en moins de 5 minutes après la modification source.

description_parameters

Le système inclut des données de référence pour standardiser les valeurs dans l'ensemble de la base de données :

Type de référence
Description
Valeurs exemples

Définitions de type

Types d'entités standard

vehicle_type: car, truck, bus

Codes d'état

Valeurs d'état des tâches et du système

tasks_status: unassigned, assigned, done

Définitions d'unités

Unités de mesure pour les capteurs

units_type: liter, gallon, celsius

Classifications d'entités

Catégories d'entités métier

entities_type: place, task, customer

Tables clés par catégorie

Les tables du raw_business_data schéma sont organisées en catégories fonctionnelles pour faciliter la navigation. Le tableau ci‑dessous résume les tables clés selon leur finalité métier :

Entités métier principales

users

But: Informations de compte et de profil utilisateur

Attribut
Détails

Champs clés

user_id, company_label, first_name, last_name, middle_name, locale, timezone_label, master_id, registration_datetime

Relations

Utilisateur parent via master_id, lié à employés, départements, lieux, tâches par user_id

Notes spéciales

Entité centrale connectant les données organisationnelles ; master_id permet des hiérarchies d'utilisateurs pour des structures de comptes à plusieurs niveaux

employés

But: Enregistrements d'employés et de conducteurs avec détails sur les licences et les affectations

Attribut
Détails

Champs clés

employee_id, user_id, object_id, department_id, first_name, last_name, driver_license_number, driver_license_valid_till, hardware_key

Relations

Liens vers users, départements, objects (traceur assigné), suivi dans driver_history et checkins

Notes spéciales

La clé matérielle permet l'identification du conducteur via iButton ou RFID ; prend en charge la géoclausure avec latitude, longitude, rayon champs

départements

But: Unités organisationnelles avec localisation géographique

Attribut
Détails

Champs clés

department_id, user_id, department_label, latitude, longitude, rayon, adresse

Relations

Relie les employés à la structure organisationnelle via department_id

Notes spéciales

Les champs de localisation prennent en charge les analyses basées sur des géofences pour les rapports au niveau des départements

Suivi et surveillance

devices

But: Informations sur le dispositif de suivi physique et l'état réseau

Attribut
Détails

Champs clés

device_id, owner_id, device_imei, phone, status_listing_id, network_label, signal_level, has_roaming, created_at

Relations

Entité centrale reliant à objects, models, sensor_description, counters; owner_id references users.user_id

Notes spéciales

Toutes les données télématiques dans raw_telematics_data le schéma référencent cette table via device_id

objects

But: Entités surveillées (véhicules, biens, personnel)

Attribut
Détails

Champs clés

object_id, client_id, device_id, object_label, model, group_id, create_datetime, is_deleted

Relations

Point central connectant les dispositifs aux utilisateurs (client_id), détails du véhicule, historique de suivi, tâches et règles

Notes spéciales

Représente « l'unité traçable » dans le système ; un objet par dispositif en utilisation active

models

But: Spécifications matérielles et capacités du dispositif

Attribut
Détails

Champs clés

model_id, model, vendor, alternative_label, analog_amount, digital_amount, outputs_amount, has_battery_level, has_altitude, has_phone

Contenu

Des indicateurs de capacité booléens indiquent quels champs de données sont disponibles pour ce type d'appareil

Notes spéciales

Utilisez les indicateurs de capacité pour déterminer les capteurs et entrées valides lors de l'interrogation des données télématiques

sensor_description

But: Données de configuration et d'étalonnage des capteurs

Attribut
Détails

Champs clés

sensor_id, device_id, sensor_label, input_label, sensor_type, units_type, multiplier, divider, accuracy, calibration_data

Relations

Relie les entrées de l'appareil (depuis raw_telematics_data.inputs) à la logique métier via device_id et input_label matching

Notes spéciales

calibration_data (JSONB) stocke des tables d'étalonnage spécifiques aux capteurs pour les jauges de carburant ; multiplier et divider convertir les valeurs brutes en unités

Gestion des actifs

vehicles

But: Spécifications du véhicule, documentation et paramètres opérationnels

Attribut
Détails

Champs clés

vehicle_id, user_id, object_id, garage_id, vehicle_label, registration_number, vin, manufacture_year, fuel_type, fuel_cost, standard_fuel_consumption, max_speed

Relations

Liens vers objects (traceur actuel), garages (lieu de service), vehicle_service_tasks; suivi dans vehicle_trackers_history

Notes spéciales

Les champs de dimension physique (payload_length, payload_width, payload_height, gross_weight) prennent en charge l'analyse de planification de charge ; les dates d'assurance permettent le suivi de conformité

garages

But: Emplacements des ateliers et installations de maintenance

Attribut
Détails

Champs clés

garage_id, user_id, latitude, longitude, rayon, adresse, organization_label, mechanic_name, dispatcher_name

Relations

Référencé par vehicles.garage_id pour l'affectation du lieu de service

Notes spéciales

Les champs de localisation permettent la détection des visites de service basées sur la géofence et l'analyse de proximité

vehicle_service_tasks

But: Calendriers de maintenance et historique des services

Attribut
Détails

Champs clés

service_task_id, vehicle_id, description, status, cost, start_date, end_date, completion_date, predicted_datetime, mileage_limit, engine_hours_limit

Contenu

Prend en charge trois types de déclencheurs : basés sur la date, le kilométrage et les heures moteur ; paramètres de notification pour e‑mail, SMS, push

Notes spéciales

is_repeat et les champs d'intervalle permettent des calendriers de maintenance récurrents ; is_unplanned distingué entre maintenance planifiée et réactive

Localisation et routage

zones

But: Zones géoclavées pour la surveillance et l'automatisation

Attribut
Détails

Champs clés

zone_id, client_id, zone_label, zone_type, latitude, longitude, circle_center_latitude, circle_center_longitude, rayon, adresse, color

Contenu

Les types de zone incluent cercle, polygone (défini via geofence_points), et des classifications de zones spéciales

Relations

Référencé par rules2zones, users2zones; sommets de polygone stockés dans geofence_points

Notes spéciales

Les fonctions PostGIS peuvent être utilisées pour vérifier si un point est dans un polygone pour des analyses complexes de géofence

lieux

But: Points d'intérêt avec attributs personnalisés

Attribut
Détails

Champs clés

place_id, user_id, place_label, latitude, longitude, rayon, adresse, description, external_id, custom_fields

Relations

Étendu avec des valeurs de champs personnalisés via places_text_fields, places_decimal_fields, places_bigint_fields, places_longtext_fields, places_linked_entity_fields

Notes spéciales

custom_fields JSONB fournit un accès rapide ; les tables associées permettent le filtrage et le tri sur les attributs personnalisés

geofence_points

But: Coordonnées des sommets de polygone pour des formes de géofence complexes

Attribut
Détails

Champs clés

zone_id, number, latitude, longitude

Relations

Plusieurs enregistrements par zone_id définissent les limites du polygone ; number le champ détermine l'ordre des sommets

Notes spéciales

Interroger avec ORDER BY number pour reconstruire le chemin du polygone ; utiliser avec PostGIS ST_MakePolygon pour les opérations géométriques

Gestion des tâches et des flux de travail

tâches

But: Affectations d'ordres de travail et suivi d'exécution

Attribut
Détails

Champs clés

task_id, user_id, object_id, parent_task_id, task_label, status, task_type, latitude, longitude, rayon, arrival_datetime, created_at, status_change_datetime, custom_fields

Contenu

Prend en charge les tâches hiérarchiques via parent_task_id; fenêtres temporelles définies par time_from/time_to; validation de géofence avec localisation et rayon

Relations

Liens vers forms (collecte de données), task_history (changements d'état), objects (traceur assigné)

Notes spéciales

stay_duration et arrival_duration_minutes permettent le suivi de conformité pour les tâches de livraison et de service

forms

But: Formulaires de collecte de données et soumissions

Attribut
Détails

Champs clés

form_id, task_id, object_id, form_label, champs, values, submitted_at, submission_latitude, submission_longitude, is_submission_in_zone

Contenu

champs définit la structure du formulaire (JSON) ; values contient les données soumises (JSON)

Relations

Liens vers tâches (ordre de travail associé), objects (soumettant), référencé dans checkins

Notes spéciales

Indicateur de validation de localisation is_submission_in_zone active des règles de soumission de formulaire basées sur la géofence

checkins

But: Enregistrements de présence et d'activité basés sur la localisation

Attribut
Détails

Champs clés

checkin_id, employee_id, object_id, form_id, user_id, planned_datetime, actual_datetime, latitude, longitude, rayon, adresse, comment

Relations

Relie les employés aux formulaires et aux lieux ; suit les écarts par rapport au planning prévu

Notes spéciales

Variance temporelle entre planned_datetime et actual_datetime permet la production de rapports de ponctualité ; le rayon définit la tolérance de localisation acceptable

task_history

But: Piste d'audit pour les événements du cycle de vie des tâches

Attribut
Détails

Champs clés

task_history_id, task_id, user_id, activity, event_datetime, payload

Contenu

Types d'activités définis dans description_parametrs; payload stocke les détails spécifiques à l'événement (texte)

Notes spéciales

Essentiel pour l'analyse d'achèvement des tâches, les rapports de transition d'état et le suivi de l'activité des utilisateurs

Règles et automatisation

rules

But: Déclencheurs d'événements et configurations d'alerte

Attribut
Détails

Champs clés

rule_id, object_id, client_id, event_type, event_label, event_group, description, parameters, alert_email, alert_sms, alert_phone, is_push_enabled, created_at, is_deleted

Contenu

Les paramètres de règle (JSONB) définissent les conditions de déclenchement ; prennent en charge les notifications par e‑mail, SMS, téléphone et push

Relations

Lie aux objets via rules2objects, aux zones via rules2zones

Notes spéciales

event_type définit un scénario de surveillance spécifique (excès de vitesse, infraction de géofence, seuil de capteur) ; maximum le champ permet l'agrégation d'événements pour les alertes basées sur seuil

rules2objects

But: Associations règle‑vers‑objet avec paramètres spécifiques à l'instance

Attribut
Détails

Champs clés

rule_id, object_id, param_group_number, object_params

Contenu

object_params (JSONB) permet la personnalisation des règles par objet (par ex., différentes limites de vitesse par véhicule)

Notes spéciales

La relation plusieurs‑à‑plusieurs permet à une règle de surveiller plusieurs objets avec des paramètres différents

rules2zones

But: Associe les règles aux déclencheurs de géofence

Attribut
Détails

Champs clés

rule_id, zone_id

Notes spéciales

La relation plusieurs‑à‑plusieurs permet la surveillance multi‑zones pour une seule règle (par ex., alerter lors de l'entrée dans l'une de plusieurs zones restreintes)

Statut et catégorisation

statuses

But: Définitions de statuts personnalisés pour les listes de statuts

Attribut
Détails

Champs clés

status_id, listing_id, status_label, color, order_sort, is_deleted

Relations

Groupes de statuts organisés par listing_id (références status_listings); utilisés dans status_history

Notes spéciales

order_sort définit la séquence d'affichage ; la couleur permet une différenciation visuelle dans les rapports

status_listings

But: Définitions d'ensembles de statuts pour dispositifs ou employés

Attribut
Détails

Champs clés

status_listing_id, user_id, status_listing_label, is_supervisor_controlled, is_employee_controlled, is_deleted

Relations

Référencé par devices.status_listing_id et statuses.listing_id

Notes spéciales

Les indicateurs de contrôle déterminent qui peut changer les statuts : uniquement le superviseur, auto‑service employé, ou les deux

status_history

But: Piste d'audit pour les changements de statut

Attribut
Détails

Champs clés

status_history_id, device_id, old_status_id, new_status_id, updated_by, changed_datetime, server_datetime, latitude, longitude, adresse

Relations

Liens vers devices, statuses (ancien et nouveau), description_parametrs (pour updated_by rôle)

Notes spéciales

La capture de localisation permet l'analyse géographique des transitions d'état ; utile pour les rapports de lieu de début/fin de journée de travail

tags

But: Étiquettes de catégorisation définies par l'utilisateur

Attribut
Détails

Champs clés

tag_id, user_id, tag_label, color

Relations

Appliqué aux entités via tag_links; portée définie par l'utilisateur

Notes spéciales

Système de catégorisation flexible supportant plusieurs tags par entité

Groupes et hiérarchie

groups

But: Regroupement organisationnel pour les objets (traceurs)

Attribut
Détails

Champs clés

group_id, client_id, group_label, group_color

Relations

Référencé par objects.group_id; propriété client via client_id (références users)

Notes spéciales

Permet une organisation de type dossier des entités de surveillance pour les rapports et les permissions

groups_objects

But: Relation plusieurs‑à‑plusieurs entre groupes et objets

Attribut
Détails

Champs clés

Clé primaire composite : groups_client_id, objects_client_id

Notes spéciales

Permet aux objets d'appartenir simultanément à plusieurs groupes ; interroger avec les deux client_id valeurs pour l'appartenance au groupe

Champs personnalisés et entités

entities

But: Définitions de types d'entité pour le cadre de champs personnalisés

Attribut
Détails

Champs clés

entity_id, user_id, entity_label, builtin_type

Relations

Référencé par custom_fields pour définir quels champs personnalisés s'appliquent à quels types d'entités

Notes spéciales

builtin_type liens vers description_parametrs pour les classifications d'entités définies par le système

custom_fields

But: Définitions de champs personnalisés

Attribut
Détails

Champs clés

custom_field_id, entity_id, custom_field_label, custom_field_type, description, is_required, parameters

Contenu

parameters (JSONB) stocke la configuration spécifique au type de champ (règles de validation, options de liste déroulante, etc.)

Relations

Définit les attributs personnalisés disponibles pour les entités ; le type de champ est lié à description_parametrs

Notes spéciales

Permet une extension dynamique du schéma sans modifications de la base de données ; utilisé intensivement dans lieux et tâches

Suivi historique

driver_history

But: Journal des changements d'affectation employé→objet

Attribut
Détails

Champs clés

driver_history_id, object_id, old_employee_id, new_employee_id, hardware_key, changed_datetime, server_datetime, updated_by, latitude, longitude, adresse

Relations

Suit les affectations de conducteurs aux véhicules au fil du temps ; lié à employés et objects

Notes spéciales

Essentiel pour les rapports spécifiques aux conducteurs lorsque ceux‑ci changent de véhicule ; la capture de localisation permet l'analyse du lieu de changement d'affectation

vehicle_trackers_history

But: Journal des changements d'affectation véhicule→traceur

Attribut
Détails

Champs clés

vehicle_tracker_history_id, vehicle_id, object_id, changed_datetime

Relations

Suit quel appareil GPS a été installé dans quel véhicule au fil du temps

Notes spéciales

Critique pour l'analyse des données historiques lorsque les traceurs sont déplacés entre véhicules ; permet une attribution précise du kilométrage et de l'utilisation

Données de référence et de recherche

description_parametrs

But: Données de référence système et valeurs d'énumération

Attribut
Détails

Champs clés

key, type, description

Contenu

Fournit des libellés lisibles par l'humain pour des valeurs codées dans toute la base de données (statut des tâches, types de carburant, types de compteurs, etc.)

Relations

Référencé via des clés étrangères depuis plusieurs tables pour une catégorisation standardisée

Notes spéciales

Essentiel pour traduire des codes entiers en valeurs lisibles dans les rapports ; type les groupes de champs liés aux énumérations

counters

But: Configuration du suivi du kilométrage et des heures moteur

Attribut
Détails

Champs clés

counter_id, device_id, counter_type, sensor_id, multiplier

Relations

Relie les dispositifs aux relevés de capteurs représentant des compteurs de distance ou de temps

Notes spéciales

multiplier convertit les impulsions du capteur en unités réelles (km, miles, heures) ; counter_type from description_parametrs définit le type de mesure

device_output_name

But: Étiquettes personnalisées pour les canaux de sortie de l'appareil

Attribut
Détails

Champs clés

device_id, number, étiquette

Contenu

Mappe les numéros de canal de sortie vers des noms définis par l'utilisateur (par ex., "Door Lock", "Engine Block")

Notes spéciales

Active des rapports lisibles lors de l'analyse des commandes et états de sortie de l'appareil

raw_telematics_data structure

Le raw_telematics_data schéma contient trois types de tables principaux qui fonctionnent ensemble pour fournir des données complètes sur les appareils.

Bronze layer raw telematics data ERD
ERD des données télématiques brutes de la couche Bronze

Le diagramme interactif du schéma raw_telematics_data est disponible sur dbdiagram.io: https://dbdiagram.io/d/v1-schema-telematics-bd-67a0acef263d6cf9a0d8e750

Trouvez les détails du schéma des données télématiques brutes ci‑dessous.

schéma raw_telematics_data

Tables clés par catégorie

Chaque table sert un objectif spécifique pour capturer différents aspects de l'information sur l'appareil :

tracking_data_core

But: Données principales de localisation et de mouvement

Attribut
Détails

Champs clés

device_id, device_time, platform_time, latitude, longitude, speed, altitude, satellites, hdop, event_id

Indexation

Optimisé avec un index sur (device_id, device_time)

Notes spéciales

Les données de localisation (latitude et longitude) utilisent le format entier avec une précision de 10⁷ pour des performances optimales avec TimescaleDB La vitesse est également stockée en entier, il faut donc la diviser par 100

inputs

But: Mesures des capteurs provenant des appareils

Attribut
Détails

Champs clés

input_id, device_id, device_time, sensor_name, value

Contenu

Mesures analogiques (niveau de carburant, température, tension), valeurs calculées (régime moteur)

Relations

states

But: Indicateurs d'état de l'appareil et modes de fonctionnement

Attribut
Détails

Champs clés

state_id, device_id, device_time, state_name, value

Contenu

Indicateurs de mode de fonctionnement (travail, inactif, éteint), états des composants (allumage, portes)

Format de valeur

Valeurs booléennes (1/0) ou codes d'état spécifiques

Les données de ce schéma sont ingérées directement depuis les appareils, avec une latence minimale (typiquement en secondes). Le schéma est optimisé pour les séries temporelles en utilisant TimescaleDB pour un stockage et une récupération efficaces.

Informations complémentaires

Validation des données

La base de données applique l'intégrité des données via plusieurs mécanismes :

  • contraintes CHECK valider que les valeurs se situent dans des plages acceptables

  • clés étrangères garantir que les relations entre les tables restent cohérentes

  • contraintes NOT NULL garantir que les champs requis ont toujours des valeurs

  • valeurs DEFAULT fournir un secours lorsque les données ne sont pas fournies explicitement

Optimisation des requêtes

Les tables sont organisées avec des stratégies d'indexation spécifiques :

  • Toutes les tables incluent index basés sur le temps sur record_added_at

  • Les colonnes de clés étrangères disposent d'index dédiés pour les performances de jointure

  • Les combinaisons de colonnes fréquemment utilisées ont des index composites

  • TimescaleDB fournit des index spécialisés pour les requêtes sur séries temporelles

repo structure de données

Le repo le schéma fournit un cadre complet pour gérer les structures organisationnelles, les actifs, les appareils et leurs relations dans des environnements multi‑locataires. Construit sur PostgreSQL 14+ avec l'extension ltree, le schéma prend en charge des organisations hiérarchiques, des définitions de champs personnalisés pour tout type d'entité, un contrôle d'accès basé sur les rôles avec restrictions au niveau des objets, et des pistes d'audit complètes avec suivi des modifications au niveau des champs. Toutes les entités peuvent être étendues sans modification du schéma, localisées pour des déploiements internationaux, et liées via des relations polymorphes flexibles.

Le schéma répond à des scénarios complexes de gestion des données incluant les hiérarchies d'actifs de flotte à travers les niveaux organisationnels, les plateformes SaaS multi‑locataires nécessitant l'isolation des données, les opérations soumises à conformité avec exigences d'audit détaillées, et les systèmes nécessitant des modèles de données dynamiques adaptables via des champs personnalisés plutôt que des migrations de base de données.

Le diagramme interactif derepo schéma de données est disponible sur dbdiagram.io: https://dbdiagram.io/d/Navixy-Repo-data-schema-68ad788c1e7a611967a0930e

Trouvez le repo détails du schéma ci‑dessous.

repo schéma de données

Fréquence de mise à jour

Données dans le repo schéma sont synchronisées en temps réel avec les systèmes sources. Les mises à jour se produisent immédiatement au fur et à mesure des changements, les pistes d'audit capturant toutes les modifications pour la conformité et l'analyse historique.

ci_base

Le repo schéma utilise un modèle Single Table Inheritance pour toutes les données de référence via la ci_base table :

Le repo schéma utilise un Single Table Inheritance modèle pour toutes les données de référence via la ci_base table. Cette conception consolide les dictionnaires système, les classifications et les éléments de référence définis par l'utilisateur en une structure unifiée, offrant cohérence et flexibilité dans l'ensemble du schéma.

Architecture :

Le ci_base table sert de fondation pour toutes les données de référence, en utilisant un champ discriminant pour identifier le type de référence spécifique. Chaque type de référence possède une table correspondante (comme ci_device_type, ci_asset_type) qui partage le même id que ci_base, créant une relation d'héritage sûre par type.

Comment les entités métier se connectent à ci_base :

Toutes les entités métier du repo schéma référencent ci_base des sous‑types pour définir leur classification et leur comportement :

  • organisation → référence ci_organization_type (qui hérite de ci_entity_typeci_base)

  • utilisateur → référence ci_user_type (qui hérite de ci_entity_typeci_base)

  • appareil → référence ci_device_type et ci_device_status (les deux héritent de ci_base)

  • asset → référence ci_asset_type (qui hérite de ci_entity_typeci_base)

  • inventaire → référence ci_inventory_type (qui hérite de ci_entity_typeci_base)

  • groupe_d_actifs → référence ci_asset_group_type (qui hérite de ci_entity_typeci_base)

Catégories de types de référence :

Catégorie
Tables
But

Configuration système

ci_module, ci_country, ci_role

Définir les modules système, les références géographiques et les rôles utilisateur

Définitions de types d'entités

ci_entity_type, ci_device_type, ci_asset_type, ci_inventory_type, ci_organization_type, ci_user_type, ci_asset_group_type

Classer toutes les entités métier par type

État et classification

ci_device_status, ci_asset_type_category

Suivre les états des entités et regrouper les types en catégories

Contrôle d'accès

ci_permission_scope

Définir quelles permissions peuvent être accordées (connecté à ci_module et ci_entity_type)

Relations

ci_device_relation_type

Définir les types de relations entre appareils (maître‑esclave, sauvegarde, etc.)

Catégorisation

ci_tag, ci_catalog_category

Permettre un balisage flexible et une organisation du catalogue

Exemples de motifs de requête

Tables clés par catégorie

Les tables du repo les schémas sont organisés en catégories fonctionnelles. Les descriptions ci‑dessous résument les tables les plus importantes selon leur objectif métier.

organisation

Objectif : Gestion hiérarchique des organisations

Attribut
Détails

Champs clés

id, parent_id, path, organization_type_id, title_en, is_active, deleted_at

Indexation

Index GiST sur path pour les requêtes hiérarchiques, index sur parent_id et organization_type_id

Notes spéciales

Utilise ltree pour les hiérarchies multi‑niveaux, hérite de customizable_entity pour la prise en charge des champs personnalisés

utilisateur

Objectif : Comptes utilisateur et authentification

Attribut
Détails

Champs clés

id, organization_id, user_type_id, identity_provider, identity_provider_id, full_name, is_active

Indexation

Index unique sur (organization_id, identity_provider, identity_provider_id)

Notes spéciales

Intégration de fournisseurs d'identité externes (Keycloak, Auth0, Okta), hérite de customizable_entity

appareil

Objectif : Appareils de suivi physiques

Attribut
Détails

Champs clés

id, organization_id, device_type_id, status_id, hw_id, étiquette

Indexation

Index sur organization_id, device_type_id, status_id, hw_id

Notes spéciales

Identifiant matériel pour le suivi des appareils, hérite de customizable_entity pour les champs personnalisés

asset

Objectif : Actifs physiques ou virtuels

Attribut
Détails

Champs clés

id, organization_id, asset_type_id, étiquette, description

Indexation

Index sur organization_id et asset_type_id

Notes spéciales

Hérite de customizable_entity, lié aux appareils via device_asset_link

inventaire

Objectif : Enregistrements d'inventaire et d'entrepôt

Attribut
Détails

Champs clés

id, organization_id, inventory_type_id, code

Indexation

Index unique sur (organization_id, code)

Notes spéciales

Codes uniques au sein de l'organisation, liés aux appareils via device_inventory_link

groupe_d_actifs

Objectif : Regroupement d'actifs avec suivi historique

Attribut
Détails

Champs clés

id, organization_id, group_type_id, title_en, description

Relations

FROM repo.asset_group AS ag JOIN repo.asset_group_item AS agi ON agi.group_id = ag.id JOIN repo.asset AS a ON a.id = agi.asset_id WHERE agi.detached_at IS NULL

Notes spéciales

Adhésion temporelle via asset_group_item, interroger les membres actuels avec WHERE detached_at IS NULL

custom_field_def

Objectif : Définitions de champs personnalisés et méta‑données

Attribut
Détails

Champs clés

id, organization_id, owner_entity_type_id, code, field_type, is_multi, is_required

Contenu

Les types de champs incluent texte, nombre, booléen, date, datetime, entity_ref, catalog_item_ref

Notes spéciales

Permet des champs personnalisés flexibles pour tout type d'entité, les valeurs sont stockées dans des custom_field_value_* tables

acl_role_permission

Objectif : Gestion des permissions basée sur les rôles

Attribut
Détails

Champs clés

id, role_id, permission_scope_id, target_entity_id, actions

Contenu

Masque de bits d'action (READ=1, UPDATE=2, DELETE=4, CREATE=8), permissions ciblées ou étendues à un type d'entité

Relations

FROM repo.user_role AS ur JOIN repo.acl_role_permission AS rp ON rp.role_id = ur.role_id WHERE ur.user_id = $user_id

Notes spéciales

Travaille avec user_role et acl_user_scope pour déterminer les permissions finales de l'utilisateur

audit_event

Objectif : Journal d'audit unifié pour tous les changements du système

Attribut
Détails

Champs clés

id, event_category, user_id, aggregate_type, aggregate_id, event_type, event_data, occurred_at

Indexation

Index sur (user_id, occurred_at), (aggregate_type, aggregate_id, occurred_at), (event_category, occurred_at)

Notes spéciales

Partitionné par occurred_at (mensuel), deux catégories : auth (authentification) et domain (événements métier), stocke les deltas de changement au niveau des champs en event_data JSONB

Relations de données

Le repo le schéma implémente des modèles de relation sophistiqués pour une modélisation de données flexible :

Structures hiérarchiques

  • Les organisations utilisent des chemins ltree pour des requêtes d'arbre efficaces

  • Les éléments de référence (ci_base) prennent en charge des hiérarchies optionnelles

  • Maintenance automatique des chemins via des triggers de base de données

Schémas d'héritage

  • Héritage de table : customizable_entity → entités métier (organisation, utilisateur, appareil, asset, inventaire, groupe_d_actifs)

  • Héritage d'ID : ci_base → tables de type de référence

  • Discrimination de type via entity_type_id et champ champs

Relations polymorphes

Certaines tables utilisent des références polymorphes sans contraintes de clé étrangère pour une flexibilité maximale :

  • acl_role_permission.target_entity_id → n'importe quelle customizable_entity

  • acl_user_scope.target_entity_id → n'importe quelle customizable_entity

  • entity_tag.entity_id → n'importe quelle customizable_entity

Ces relations sont validées au niveau de l'application.

Informations complémentaires

Validation des données

Le repo le schéma garantit l'intégrité des données via plusieurs mécanismes :

Contraintes de base de données

  • Contraintes UNIQUE avec prise en charge de la suppression logique (index partiels WHERE deleted_at IS NULL)

  • Contraintes CHECK (par ex., device_relation assure master_idslave_id)

  • Contraintes NOT NULL sur les champs obligatoires

  • Valeurs DEFAULT pour les horodatages et les drapeaux booléens

Validation au niveau de l'application

  • Validation du type d'entité pour les références polymorphes

  • Validation du catalogue pour les références de champs personnalisés

  • Validation du type de champ personnalisé

  • Gestion des tableaux de champs à valeurs multiples

Optimisation des requêtes

Les tables sont organisées avec des stratégies d'indexation spécifiques :

Indexes standard :

  • Toutes les clés étrangères ont des index dédiés

  • Indexes temporels sur created_at, updated_at, deleted_at

  • Index composites pour les colonnes fréquemment jointes

Indexes spécialisés :

  • Indexes GiST sur les chemins ltree pour les requêtes hiérarchiques

  • Index uniques partiels prenant en charge la suppression logique

  • Index des valeurs de champs personnalisés pour le filtrage et le tri

  • Index d'événements d'audit sur le temps + l'entité pour des recherches efficaces

Considérations de performance :

  • Pool de connexions recommandé (PgBouncer)

  • Maintenance VACUUM régulière pour les grandes tables

  • Partitionnement futur possible pour appareil table par organization_id

  • Vues matérialisées pour des calculs complexes de contrôle d'accès

Mis à jour

Ce contenu vous a-t-il été utile ?