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 et nom_schema, le bloc prévaudra sur le préfixe de nom_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)