Architecture de l’application¶
Cette section contient des renseignements techniques sur la mise en œuvre actuelle de l’application dorsale de la Base de données sur les obstacles aquatiques du Canada (BDOAC), y compris les services d’éléments et de tuiles vectorielles ainsi que le dictionnaire de données de la BDOAC. Le public cible est composé des développeurs de logiciels et des utilisateurs techniques similaires qui cherchent à mettre à niveau ou à maintenir le système actuel ou à utiliser les points de fin API.
Mise en œuvre actuelle¶
L’application actuelle repose sur deux serveurs d’applications Web Java Microsoft Azure, cabd-web
(pour les données BDOAC) et chyf-web
(pour les données CHyF).
Éléments et modèles de base de données¶
Modèle d’élément BDOAC¶
Modèle d’élément générique¶
Les éléments dans la BDOAC ont une structure hiérarchique facultative. Il est possible de combiner les types d’éléments pour former des supertypes.
Il n’y a pas de structure dans le logiciel ou la base de données qui appliquent ce modèle. On utilise les vues de la base de données (voir section ci-dessous) pour définir les différents types et supertypes d’éléments. Au besoin, il est possible d’associer un type d’éléments à plusieurs supertypes.
Modèle d’élément mis en œuvre¶
Trois types d’éléments et un supertype sont actuellement mis en œuvre dans la BDOAC.
Types d’éléments :
barriers
- un supertype d’élément qui comprend des barrages, des chutes et d’autres structures.dams
- un type couvrant les éléments classés comme barrage ou autre structure.waterfalls
- un type couvrant les éléments classés comme chute.fishways
- un type couvrant les éléments classés comme passe à poissons.medium
- un type d’élément que l’on a créé pour tester l’augmentation du volume de données prévue en ce qui a trait aux données relatives aux franchissements de cours d’eau.big
- un type d’élément que l’on a créé pour tester l’augmentation du volume de données prévue en ce qui a trait aux données relatives aux franchissements de cours d’eau.
Modèle de base de données BDOAC¶
La base de données est structurée en plusieurs schémas. Chaque type d’élément a son propre schéma, avec un schéma BDOAC commun pour les données transmises et les métadonnées des éléments.
Vues des éléments¶
Chaque type et supertype d’élément a deux vues qui prennent en charge l’API – une pour l’anglais (_en) et une pour le français (_fr). Ces vues devraient inclure tous les champs requis pour l’édition (pour l’affichage dans l’interface utilisateur ou pour prendre en charge la future API d’édition).
La vue prend en charge tous les points de fin de l’API des éléments.
The view cabd.all_features_view_<en/fr> supports all feature api endpoints.
On utilise les vues pour la prise en charge des API de la BDOAC qui répertorient les éléments. Chaque type d’élément est lié à une vue de la base de données. Lors de la demande d’éléments d’un type particulier, la vue associée à ce type est interrogée. On utilise les champs récupérés au moyen de cette vue pour saisir les attributs de l’élément récupéré au moyen de l’API. Les vues de type d’élément interrogent généralement un seul tableau de données (par exemple, la vue des dams
interroge le tableau de données des barrages). Les supertypes d’éléments interrogent généralement plusieurs tableaux de données (par exemple, la vue des barriers
interroge le tableau de données des barrages et celui des chutes).
Vue de mise à jour des éléments¶
Chaque élément comprend un attribut updates_pending
indiquant une valeur true
ou false
indiquant s’il y a des mises à jour d’élément en attente d’examen dans le système. Le système remplit ce champ au moyen de la vue cabd.updates_pending
. Cette vue devrait afficher une seule colonne, cabd_id
, pour chaque élément pour lequel il y a un examen en attente dans la base de données.
Tableaux de base¶
Il s’agit des tableaux de base du système. Ils sont requis, quels que soient les types d’éléments chargés. Ils prennent en charge la définition des types d’éléments.
cabd.feature_types
Indique tous les types d’éléments pris en charge par le système.
Column |
Description |
---|---|
type |
L’identifiant unique pour le type d’élément. Obligatoire. |
data_view |
Le nom racine de la vue de données qui prend en charge le type d’élément. Il s’agit du nom de vue sans le suffixe de la langue (par exemple, dams_view). Obligatoire. |
name_en |
Le nom anglais interprétable par l’utilisateur du type d’élément. Obligatoire. |
name_fr |
Le nom français interprétable par l’utilisateur du type d’élément. Obligatoire. |
attribute_source_table |
Le tableau de données contenant les renseignements sur la source des données sur les attributs pour le type d’élément. Ce paramètre est facultatif et peut être réglé à null. |
default_featurename_field |
Le champ de la vue data_view qui représente le nom de l’élément principal. |
feature_source_table |
Le tableau de données contenant un lien entre les éléments et les renseignements de la source de données. Ce paramètre est facultatif et peut être réglé à null. |
data_version |
Le numéro de version des données pour le type d’élément. Ce numéro de version est inclus dans les exportations. |
cabd.feature_type_metadata
Indique tous les attributs pour une vue d’éléments donnée ainsi que des renseignements détaillés sur les métadonnées de l’attribut.
Column |
Description |
---|---|
view_name |
Le nom de la vue de données. |
field_name |
Le nom du champ de la vue de données qui représente cet attribut. |
name_en |
Le nom anglais de l’attribut. |
name_fr |
Le nom français de l’attribut. |
description_en |
Une description en anglais de l’attribut. |
description_fr |
Une description en français de l’attribut. |
is_link |
Opérateur booléen. Si la valeur est true, cet attribut sera traité comme une URL dans l’API. La valeur sera renvoyée au format URL (par exemple, lien vers un autre élément). |
data_type |
Le type de données pour l’attribut. Valeurs valides : varchar(xxx), text, boolean, array(type), integer, double, uuid, date, geometry. |
vw_simple_order |
Métadonnées pour l’interface utilisateur. L’interface utilisateur offre une vue simple et complète des attributs. Ce champ représente l’ordre dans lequel l’attribut devrait être affiché dans la vue de l’interface utilisateur simple. La valeur devrait être réglée à null pour les attributs qui ne doivent pas être affichés dans la vue simple. |
vw_all_order |
Métadonnées pour l’interface utilisateur. L’interface utilisateur offre une vue simple et complète des attributs. Ce champ représente l’ordre dans lequel l’attribut devrait être affiché dans la vue de tous les attributs. La valeur devrait être réglée à null pour les attributs qui ne devraient pas être affichés dans la vue. |
include_vector_tile |
Opérateur booléen. Si la valeur est true, cet attribut sera inclus dans le service de tuiles vectorielles. |
value_options_reference |
Pour les colonnes ayant une liste définie des valeurs valides dans un autre tableau de la base de données (par exemple, province_territory_code), ce champ indique le tableau à partir duquel les valeurs peuvent être chargées ainsi que les champs du tableau qui fournissent la valeur, le nom et la description. La valeur de cette colonne devrait être réglée à null pour les champs qui ne font pas référence à des tableaux. La chaîne devrait présenter la forme suivante : <tablename>;<valuefield>;<namefield>;<descriptionfield>. Toutes ces valeurs sont obligatoires, sauf valuefield et descriptionfield. La valeur tablename fait référence au tableau de codes, la valeur valuefield fait référence au champ de valeur du tableau de codes, la valeur namefield fait référence au champ de nom interprétable par l’utilisateur, et la valeur descriptionfield fait référence au champ de description du tableau. Les champs du nom et de la description devraient exclure le suffixe de la langue, et chaque tableau de référence devrait comporter les colonnes _en et _fr pour les champs du nom et de la description. Par exemple, dams.use_codes;code;name;description dams.use_codes;code;name;description ou cabd.province_territory_codes;code;name;. is_name_search,Valeur « true » (vrai) si le champ doit être inclus dans la recherche Name API. Doit être réglé à true pour tous les attributs qui représentent le nom de l’élément ou que l’on souhaite inclure lors d’une recherche par nom. |
cabd.data_source
Indique les sources des données. Prend en charge le suivi des sources des données pour les attributs des types d’éléments.
Column |
Description |
---|---|
id |
Un identifiant unique pour la source de données. |
name |
Nom de la source de données (correspond aux noms abrégés indiqués à la <https://cabd-docs-fr.netlify.app/docs_user/docs_user_data_sources.html>`_). |
version_date |
Date de la version des sources des données. |
version_number |
Numéro de la version des sources des données (facultatif). |
source |
Un lien vers les données sources ou une référence complète ainsi qu’une description de l’origine des données sources. |
comments |
Autres commentaires sur la source de données. |
source_type |
Type de source de données (spatiale ou non spatiale). |
Une liste de personnes-ressources pertinentes pour la base de données BDOAC. Actuellement, les personnes-ressources ne sont créées que lorsqu’un utilisateur soumet une mise à jour d’élément.
Column |
Description |
---|---|
id |
Numéro unique généré par le système |
Adresse courriel de l’utilisateur |
|
name |
Nom de l’utilisateur |
organization |
(Facultatif) Organisation associée à l’utilisateur |
datasource_id |
(Facultatif) Lien vers le tableau cabd.data_source, qui représente la source de données associée à l’utilisateur. |
cabd.user_feature_updates
Les utilisateurs peuvent utiliser l’API des éléments pour soumettre des mises à jour d’élément. Toutes les soumissions sont consignées dans ce tableau.
Column |
Description |
---|---|
id |
Identifiant unique généré par le système |
datetime |
Date et heure de la soumission |
contact_id |
Lien vers la personne-ressource qui a soumis la modification |
cabd_id |
Lien vers l’élément auquel la mise à jour fait référence |
cabd_type |
Type d’élément BDOAC |
user_description |
La description de la mise à jour fournie par l’utilisateur |
user_data_source |
La source de données fournie par l’utilisateur |
status |
Champ interne représentant l’état de la mise à jour. Géré par les administrateurs de la BDOAC. |
Tableaux d’attributs communs¶
Tous ces tableaux stockent des données communes à plusieurs types d’éléments. En général, chacun de ces tableaux a un code unique (pour les références), un nom et une description.
cabd.barrier_ownership_type_codes
cabd.fish_species
cabd.nhn_workunit
cabd.passability_status_codes
cabd.province_territory_codes
cabd.upstream_passage_type_codes
cabd.census_subdivisions
Tableaux d’éléments¶
Les tableaux de données des types d’éléments se trouvent dans le schéma correspondant. En général, il y a un tableau de données d’éléments et plusieurs tableaux de référence qui représentent les valeurs d’attributs. Le dictionnaire de données contient des renseignements détaillés sur les types d’éléments actuels.
Sources des données des attributs des types d’éléments¶
La base de données BDOAC offre la possibilité de consigner la source de données pour chaque attribut associé au type d’élément. À cette fin, on a mis en place des tableaux <featuretype>.<featuretype>_feature_source
et <featuretype>.<featuretype>_attribute_source
pour le type d’élément (par exemple, dams.dams_feature_source
et dams.dams_attribute_source
).
Pour chaque élément BDOAC, le tableau <featuretype>_feature_source
contient un lien vers les sources des données ainsi que les identifiants des éléments de la source de données connexe dans laquelle l’élément a été trouvé. Par exemple, un barrage trouvé à la fois dans les sources des données nrcan_canvec_mm et bceccs_fiss aura deux entrées pour sa valeur cabd_id
dans le tableau <featuretype>_feature_source
.
<featuretype>_feature_source
Column |
Description |
---|---|
cabd_id |
L’identifiant d’élément unique de la BDOAC. Cet identifiant doit être indiqué dans le tableau de données correspondant pour le type d’élément. |
datasource_id |
Lien vers l’identifiant de source de données dans le tableau cabd.data_source. |
datasource_feature_id |
L’identifiant de l’élément dans la source de données. |
Le tableau <featuretype>_attribute_source
contient la valeur`` cabd_id`` ainsi qu’une colonne pour chaque attribut nécessitant un suivi de la source des données. La colonne <attribute>_ds
renvoie au tableau cabd.data_source
à des fins de détermination de la source de données pour la valeur de l’attribut.
<featuretype>_attribute_source
Column |
Description |
---|---|
cabd_id |
L’identifiant d’élément unique de la BDOAC. Cet identifiant doit être indiqué dans le tableau de données correspondant pour le type d’élément. |
<attribute1>_ds |
Un lien vers l’identifiant de source de données dans le tableau cabd.data_source dont la valeur <attribute1> provient pour l’élément. |
<attribute2>_ds |
Un lien vers l’identifiant de source de données dans le tableau cabd.data_source dont la valeur <attribute2> provient pour l’élément. |
Journal d’audit et suivi des modifications¶
La base de données BDOAC effectue le suivi des modifications aux tableaux suivants :
cabd.contacts
cabd.fish_species
cabd.data_source
dams.dams
dams.dams_attribute_source
dams.dams_feature_source
waterfalls.waterfalls
waterfalls.waterfalls_attribute_source
waterfalls.waterfalls_feature_source
fishways.fishways
fishways.fishways_attribute_source
fishways.fishways_feature_source
fishways.species_mapping
On peut aussi ajouter le suivi des modifications aux nouveaux types d’éléments en appliquant les déclencheurs appropriés à tout nouveau tableau de bases de données pertinent.
Toutes les modifications sont consignées dans le tableau cabd.audit_log
. Ce tableau comporte les colonnes suivantes :
Column |
Description |
---|---|
revision |
Le numéro de révision unique et incrémentiel. |
datetime |
L’horodatage associé à la modification. |
username |
L’utilisateur qui a effectué la modification. Il s’agit de l’utilisateur PostgreSQL qui a effectué la modification. |
schemaname |
Le schéma du tableau modifié. |
tablename |
Le nom du tableau modifié. |
action |
INSERT, UPDATE ou DELETE. |
cabd_id |
L’identifiant d’élément BDOAC, le cas échéant, ou la valeur null. Ce champ sera rempli pour la plupart des modifications, mais il ne sera pas rempli pour les modifications apportées aux tableaux contacts, fish_species et datasources. |
datasource_id |
L’identifiant de la source de données, le cas échéant, ou la valeur null. Ce champ sera rempli si le tableau comporte un champ datasource_id qui fait partie de la clé primaire du tableau. |
id_pk |
La clé primaire pour la ligne en cours de modification, le cas échéant, ou la valeur null. Ce champ est rempli pour les tableaux dont les clés primaires ne sont pas cabd_id ou datasource_id (par exemple, contacts et fish_species). |
oldvalues |
Les valeurs originales de la ligne (avant la mise à jour). Cela n’inclut que les valeurs qui ont été modifiées. |
newvalues |
Les nouvelles valeurs pour la ligne. Cela n’inclut que les valeurs qui ont été modifiées. Les valeurs qui restent inchangées ne sont pas incluses. |