Mécanismes de mise en cohérence des champs bloc
et nom_schema
Logique générale⚓
Comme expliqué dans la présentation du champ bloc
, ASGARD maintient automatiquement la cohérence des champs
bloc
et nom_schema
de la table de gestion, évitant notamment à l'administrateur d'avoir à corriger manuellement le préfixe d'un schéma dont il veut changer le bloc en plus de modifier le bloc lui-même.
Les mécanismes de mise en cohérence suivent deux principes :
en cas de modification, la nouvelle saisie prévaut toujours sur les informations pré-existantes ;
si l’utilisateur saisit simultanément des informations contradictoires dans
bloc
etnom_schema
, le bloc prévaudra sur le préfixe denom_schema
tant qu’il n’est pas vide.
Le bloc et le préfixe des schémas mis à la corbeille[1] font l'objet d'une gestion particulière, dans la mesure où il s'agit du seul cas où le préfixe (celui d'origine est conservé) diffère du bloc (lettre « d » qui désigne la corbeille).
Mise en cohérence à la création d'un schéma (hors corbeille)⚓
Si le bloc n’est pas renseigné mais que le nom du schéma comporte un préfixe, le bloc est mis à jour selon ce préfixe.
Exemple :
Si le schéma w_jon_snow
est créé par une commande CREATE SCHEMA
, qui ne permet pas de spécifier un bloc, ASGARD saura interpréter le préfixe « w_ » dans le nom du schéma et indiquera tout de même « w » dans le champ bloc
de la table de gestion.
utilisateur → bloc NULL
+ schéma w_jon_snow
arrivée : bloc « w » + schéma w_jon_snow
Si le nom du schéma ne comporte pas de préfixe mais que le bloc est renseigné, un préfixe correspondant au bloc est ajouté au nom du schéma.
Exemple :
Si le l’utilisateur enregistre dans la table de gestion un schéma bibliotheque
avec un bloc valant « c », le schéma sera renommé en c_bibliotheque
par ASGARD.
utilisateur → bloc « c » + schéma bibliotheque
arrivée : bloc « c » + schéma c_bibliotheque
Si le nom du schéma comporte un préfixe qui ne correspond pas au bloc renseigné, le préfixe est modifié selon le bloc.
Exemple :
Si, par mégarde, l’utilisateur enregistre dans la table de gestion un schéma b_bibliotheque
avec un bloc valant « c », le schéma sera automatiquement renommé en c_bibliotheque
.
utilisateur → bloc « c » + schéma b_bibliotheque
arrivée : bloc « c » + schéma c_bibliotheque
Mise en cohérence en cas de modification (hors corbeille)⚓
Si le bloc change, le préfixe du schéma est mis à jour en conséquence.
Cette règle vaut également si le préfixe avait lui-même été modifié ou supprimé en parallèle.
Exemple :
Si le schéma w_bibliotheque
, appartenant initialement au bloc des schémas de travail (bloc
valant « w »), est déclaré comme étant un schéma de consultation (bloc
valant « c »), son nom est automatiquement transformé en c_bibliotheque
.
origine : bloc « w » + schéma w_bibliotheque
utilisateur → bloc « c » + schéma w_bibliotheque
arrivée : bloc « c » + schéma c_bibliotheque
Exemple :
Si le schéma w_bibliotheque
, appartenant initialement au bloc des schémas de travail (bloc
valant « w »), est déclaré comme étant un schéma de consultation (bloc
valant « c ») et simultanément renommé en l_librairie
(préfixe non cohérent avec le nouveau bloc), son nom est automatiquement transformé en c_librairie
.
origine : bloc « w » + schéma w_bibliotheque
utilisateur → bloc « c » + schéma l_librairie
arrivée : bloc « c » + schéma c_librairie
Si le bloc est supprimé tandis que le préfixe du schéma reste inchangé, ASGARD supprime de lui-même le préfixe du schéma.
Exemple :
Si l’utilisateur met à NULL
le champ bloc
pour le schéma c_bibliotheque
, ce dernier sera renommé en bibliotheque
.
origine : bloc « c » + schéma c_bibliotheque
utilisateur → bloc NULL
+ schéma c_bibliotheque
arrivée : bloc NULL
+ schéma bibliotheque
Si le bloc est supprimé et que le préfixe du schéma change, ASGARD met à jour le bloc selon le nouveau préfixe du schéma (comme il l’aurait fait si le bloc n’avait pas été modifié).
Exemple :
Si l’utilisateur met à NULL
le champ bloc
pour le schéma c_bibliotheque
, qu’il renomme parallèlement en w_librairie
, ASGARD conserve le nom w_librairie
et inscrira « w » dans le champ bloc
. À noter que le résultat aurait été le même si bloc
n’avait pas été vidé.
origine : bloc « c » + schéma c_bibliotheque
utilisateur → bloc NULL
+ schéma w_librairie
arrivée : bloc « w » + schéma w_librairie
Si le préfixe dans le nom du schéma change sans que le bloc ne soit modifié, ce dernier est automatiquement corrigé en conséquence.
Exemple :
Si l’utilisateur lance la commande ALTER SCHEMA w_bibliotheque RENAME TO c_bibliotheque ;
… le bloc est automatique changé de « w » à « c ».
origine : bloc « w » + schéma w_bibliotheque
utilisateur → bloc « w » + schéma c_bibliotheque
arrivée : bloc « c » + schéma c_bibliotheque
Si le préfixe dans le nom du schéma est supprimé tandis que le bloc reste inchangé, ASGARD met à NULL
le champ bloc
.
Exemple :
Si l’utilisateur lance la commande ALTER SCHEMA w_bibliotheque RENAME TO bibliotheque ;
… le bloc est automatique changé de « w » à NULL
.
origine : bloc « w » + schéma w_bibliotheque
utilisateur → bloc « w » + schéma bibliotheque
arrivée : bloc NULL
+ schéma bibliotheque
Cas des schémas à la corbeille⚓
Avec la corbeille, l’idée à retenir est qu’ASGARD fait en sorte qu’un schéma de la corbeille ait toujours pour bloc « d » et jamais comme préfixe « d_ ».
Lorsqu’un schéma est mis à la corbeille sans modification de son préfixe, ledit préfixe est conservé. Ceci vaut aussi pour un schéma sans bloc qui n’avait pas de préfixe.
Exemple :
Lorsque le schéma c_bibliotheque
, appartenant initialement au bloc « c », est mis à la corbeille par bascule du bloc à « d », son nom reste c_bibliotheque
.
origine : bloc « c » + schéma c_bibliotheque
utilisateur → bloc « d » + schéma c_bibliotheque
arrivée : bloc « d » + schéma c_bibliotheque
Lorsque le préfixe est modifié simultanément à la mise à la corbeille et que le nouveau préfixe n’est pas « d_ », le nouveau préfixe est conservé. Ceci vaut également pour une suppression de préfixe au moment de la mise à la corbeille
Exemple :
Si le schéma c_bibliotheque
est mis à la corbeille sous le nom w_bibliotheque
, il s’appellera w_bibliotheque
une fois dans la corbeille.
origine : bloc « c » + schéma c_bibliotheque
utilisateur → bloc « d » + schéma w_bibliotheque
arrivée : bloc « d » + schéma w_bibliotheque
Si l’utilisateur tente de mettre un préfixe « d_ » sur un schéma qui se trouve déjà dans la corbeille, ASGARD rétablit le préfixe antérieur (ou l’absence de préfixe, le cas échéant).
Exemple :
Toutes les tentatives pour imposer un préfixe « d_ » au schéma c_bibliotheque
de la corbeille seront annulées par ASGARD.
origine : bloc « d » + schéma c_bibliotheque
utilisateur → bloc « d » + schéma d_bibliotheque
arrivée : bloc « d » + schéma c_bibliotheque
Si l’utilisateur met un préfixe « d_ » sur un schéma qui n’est pas encore dans la corbeille, sans modifier le bloc lui-même ou en le mettant à « d » ou NULL
, alors le schéma est mis à la corbeille – son bloc devient « d » – et le préfixe antérieur (ou l’absence de préfixe) est rétabli.
On notera que si le bloc est modifié et que la nouvelle valeur n’est ni « d » ni NULL
, alors la modification du bloc prévaudra sur celle du nom et le schéma n’ira pas dans la corbeille.
Exemple :
Si le schéma c_bibliotheque
est mis à la corbeille par la commande suivante ALTER SCHEMA c_bibliotheque RENAME TO d_bibliotheque ;
… alors le schéma part bien dans la corbeille (son bloc devient « d ») et il retrouve son préfixe d’origine « c_ ».
origine : bloc « c » + schéma c_bibliotheque
utilisateur → bloc « c » + schéma d_bibliotheque
arrivée : bloc « d » + schéma c_bibliotheque
Modifier le préfixe d’un schéma de la corbeille n’a aucun effet sur le bloc, qui reste à « d » quoi qu’il arrive. Autrement dit, pour sortir un schéma de la corbeille, il faut changer son bloc, pas son nom.
Exemple :
Si l’utilisateur renomme le schéma c_bibliotheque
de la corbeille en w_bibliotheque
, le schéma sera effectivement renommé, mais demeure dans la corbeille.
origine : bloc « d » + schéma c_bibliotheque
utilisateur → bloc « d » + schéma w_bibliotheque
arrivée : bloc « d » + schéma w_bibliotheque
Lorsqu'un schéma à la corbeille est supprimé, son bloc originel est restauré.
Exemple :
Lorsque le schéma c_bibliotheque est supprimé après avoir été mis à la corbeille, le schéma inactif qui subsiste dans la table de gestion a pour bloc « c ».
origine : bloc « c » + schéma c_bibliotheque
(actif)
utilisateur → bloc « d » + schéma c_bibliotheque
intermédiaire : bloc « d » + schéma c_bibliotheque
utilisateur → suppression du schéma
arrivée : bloc « c » + schéma c_bibliotheque
(inactif)