Un OID est une valeur unique immuable associée à une instance qui est conceptuellement indépendant de la valeur qu’il représente ou de l’état de l’instance. Un identifiant d’objet OID est une valeur générée lors de la création d’un objet. Un OID permet de donner à l’objet une identité immuable et unique dans l’univers connu des objets qui sont des instances d’un type de donné abstrait.
Comment naviguer avec des ID d’objet (OID) dans une base de données Oracle
L’une des fonctionnalités orientées objet les plus intéressantes avec une base de données relationnelle tel qu’Oracle est la possibilité de définir et de stocker des ID d’objet (OID) dans des tables.
Un identificateur d’objet (représenté par le mot clé OID) identifie de manière unique un objet et permet de référencer un objet spécifique parmis tous les autres objets (enregistrements). C’est un mécanisme qui permet de récupérer aisément un enregistrement spécifique.
Contrairement à un Primary Key (PK) qui peut changer après la réorganisation d’une base de données, les OID sont immuables et resteront toujours associés à un enregistrement spécifique.
Les OID sont référés via une commande SQL REF. Un type de données SQL REF est un conteneur pour identificateurs d’objets. Les valeurs REF sont des pointeurs sur des objets de « type ». Quand une valeur REF pointe vers un objet inexistant, on dit que le REF est « suspendu ». Un REF « suspendu » est différent d’un REF NULL. Pour déterminer si un REF est suspendu ou non, on utilise la condition IS [NOT] DANGLING.
Les ID d’objet sont utilisés avec la commande SQL DEREF. Pour ce faire on définit une table avec une colonne qui contient un OID, puis on DEREF cet OID pour voir le contenu de l’enregistrement.
Prenons un exemple, supposons que vous avez un employé et une table pour les départements. Sans OID, vous devriez effectuer un SQL JOIN traditionnel pour voir les informations sur les employé appartenant à un département spécifique.
SELECT EMP.NOM, DEPT.NOM, DEPT.SUPERVISEUR FROM EMPLOYE EMP, DEPARTEMENT DEPT WHERE EMP.NO_DEPT = DEPT.NO ;
Effectuer une jointure SQL tel que ci-dessus implique habituellement la lecture de deux INDEX et cela consommera plusieurs entrées/sorties (E/S) dans Oracle.
Une alternative est de définir un OID et de conserver cet ID qui permet d’identifier l’enregistrement d’un département spécifique dans la table EMPLOYE. Pour ce faire
Créer le type d’objet « TYPE_DEPT » qui contient la définition des colonnes relative au département.
CREATE TYPE TYPE_DEPT as OBJECT ( NOM char (40), SUPERVISEUR char (40) )
Créer la table « DEPARTEMENT » en utilisant le type d’objet « TYPE_DEPT » :
CREATE TABLE DEPARTEMENT OF TYPE_DEPT ;
Créer le type d’objet « TYPE_EMP » qui contient la définition des colonnes relative au employés.
Note : La colonne département peut contenir uniquement des objets OID appartenant à des objets de département. Oracle ne permettra pas d’insérer un OID d’une autre table dans cette colonne.
CREATE TYPE TYPE_EMP AS OBJECT ( NOM char (40), DEPARTEMENT REF (TYPE_DEPT) )
Créer la table « EMPLOYE » en utilisant le type d’object « TYPE_EMP » :
CREATE TABLE EMPLOYE OF TYPE_EMP ;
Ainsi au lieu de joindre la table EMPLOYE et DEPARTEMENT afin d’obtenir les informations du département nous pouvons déréférencer l’OID du département afin de trouver directement les enregistrements correspondant.
SELECT NOM, DEREF (DEPARTEMENT) FROM EMPLOYE ;
Il est clair que déréférencer un OID est beaucoup plus rapide que d’utiliser un JOIN pour obtenir les informations sur les employés d’un département. Dans de nombreux cas, les OID de déréférencement provoquent une seule entrée/sortie (E/S), contrairement à plusieurs entrée/sortie (E/S) pour un SQL JOIN.
Quelques utilisation des OID
L’ISO et l’UIT ont publiés des normes qui définissent les OID, l’arborescence des OID ainsi que les politiques et procédures que les autorités d’enregistrements doivent suivrent. L’International Telecommunication Union (IETF) a proposé de représenter les OID par une suite d’entiers séparés par des points. Ces normes sont principalement contenus dans la série des normes ISO 9834, parties 1-8, ISO 8824, UIT X.660, X.680 et X.690. À titre d’exemple la branche relatif à l’Australian Business Number (ABN) a été enregistré auprès de « Standard Australia ». Ci-dessous on prend connaissance que l’OID enregistré 1.2.36.1.333.1 est formé des composants suivants :
1 | ISO |
2 | Organe membre |
36 | Standard Australie (OIS Registration Services) |
1 | Australian Governement |
333 | Portier (GateKeeper) |
1 | Australian Business Number (ABN) |
Référence : http://oidref.com/1.2.36.1.333
Lien vers le référentiel des OID : Global OID reference database ainsi que vers le site OID-info.com qui est un site d’information sur les object identifiers (OIDs) dont le propriétaire est la compagnie « Orange »
Le OID de la Banque Nationale auprès de ISO est : iso.org.dod.internet.private.enterprise.bnc (1.3.6.1.4.1.7667). La coordination globale de la racine DNS, de l’adressage IP et des autres ressources du protocole Internet sont effectués par Internet Assigned Numbers Authority (IANA)
- 1 iso
- 1.3 org
- 1.3.6 dod
- 1.3.6.1 internet
- 1.3.6.1.4 private
- 1.3.6.1.4.1 enterprise
- 1.3.6.1.4.1.7667
Afin de prendre connaissance du préfixe « iso.org.dod.internet.private.enterprise.bnc (1.3.6.1.4.1) » vous devez vous rendre sur le page suivante Structure of Management Information (SMI) Numbers :
Pour prendre connaissance des feuilles de l’OID représentant les entreprises privés
Decimal
| Organization
| | Contact
| | | Email
| | | |
7667
Banque Nationale du Canada
Laurent Frere
Laurent.Frere&bnc.ca