Je suis chez Oracle pendant une quinzaine de jours (première fois que je vois une machine à café avec une progress bar...). J'en profite donc pour publier la traduction d'un billet que nous avait envoyé Thomas Kyte, un vice président d'Oracle Corporation. Tom gère un forum technique très connu : askTom, il nous parle d'un post qu'il a reçu.
Salut, c’est Tom Kyte qui vous écrit un WTF pendant les congés d'Alex. Après avoir passé en revue un bon nombre de WTF historiques (Ou hystérique ?), je me suis attardé sur l'un d'eux qui m'a rappelé un message reçu dans mon forum asktom. Ce WTF d'origine est JOIN ON WTF. Le but des "architectes" de ce système était tout simple :
La modélisation de la base de données sera intégralement extensible. Toutes les tables auront uniquement quelques champs (comme les ID et les dates de création), et tout le reste des données sera stocké dans un champ texte au format XML.
Dès que j'ai lu le billet j’ai su ce qui allait arriver ensuite - la requête de malade pour retourner les données. La requête fut en effet parfaite pour souligner la simplicité des jointures sur les champs XML !
Je pense pouvoir surenchérir sur ce billet. Au moins XML est une sorte de standard industriel - après tout, il y a beaucoup d'outils qui pourraient traiter ces données, même si l'intégrité ne serait pas respectée et que ce ne serait ni performant ni une bonne idée. Vraiment, je pense que cette idée : Requête dynamique sur des Objets Java Sérialisés en Blob est bien meilleure.
Voila l'extensibilité ultime ! Une table (pas besoin de demander aux infâmes DBA de créer des tables, indexes ou autre) qui peut contenir tous les objets de la planète :
J'ai une table avec un champ blob et un champ "type" :
CREATE TABLE trx (
trxId NUMBER(18),
trxType VARCHAR2(20),
objValue BLOB,
...
)
Le champ blob contient un objet Java sérialisé. Celui-ci peut être de n'importe quelle classe, on les distingue en fonction du type et ils implémentent la même interface. Nous accédons toujours à ces objets à travers le conteneur J2E, tout marche bien pour l'instant.
Malheureusement, les "architectes" de ce système ont découvert que :
A présent, les utilisateurs veulent des rapports en utilisant Sqlplus, Crystal report, etc. Ils ont dont besoin d'une solution pour ce problème de blob.
Des utilisateurs qui veulent accéder à leurs données... Pouvez vous imaginer une telle impertinence?
C'est amusant de voir que le dernier thread (celui des objets java sérialisés) a été écrit par un certain Alexander qui suggère d'utiliser le XML ! Coïncidence? Peut-être... on sait tous qu'Alex maîtrise l'approche XML après tout :-)