Article de fond: Plutôt facile (T)

Publié le 15 mai 2008 par Wtf

"Ca devrait être plutôt facile," déclara naïvement David M, « regardes simplement dans la table Agent_ProductLines, d’accord?"

"Hum," répondit le collègue de David, James, sur un ton quelque peu condescendant, "non." David commençait à être habitué à de telles réponses. Rien dans son nouveau job n'était "plutôt facile" à réaliser.

"Okayyyyy??? Donc comment exactement pouvons nous savoir si un agent en particulier est relié à une ligne produit donnée?"

James gémit "Et bien... comme tu le sais, le développeur qui a conçu la base n'était pas vraiment un amoureux de la normalisation, de modèle relationnel ou du simple bon sens commun. Dans le cas présent, il ne voulait pas "gâcher de la place" en créant une table juste pour stocker les relations agent-produit."

David soupira. Il savait exactement ce qu'il allait découvrir : des stupides chaînes de caractères dans la base Agent délimitées par des virgules, tilde, et autres astérisques.

"Oh, et ça devient pire," répondit James, "regardes, jettes un coup d'oeil à cette colonne, la NVARCHAR(2000) nommée strProductLines."

David ouvrit la table. Il était confronté à quelque chose de bien pire qu’une chaîne de caractère délimitée...

012-3100000100110000001000000103000001001100000-1011010101---0010011000000100000001000001001---00000500000010600010011000000100000

"C'est quoi cette ---"

"Ici," dit James en lui coupant la parole, "Laisses moi te montrer comment ça marche." Il attrapa un crayon, un bloc et commença à dessiner un tableau.

ID 1 2 3 4 5 6 7 8 ...

Value 0 1 1 - 3 1 0 0 ...

"Attends," dit David" tu veux dire que l'indexe de chaque caractère correspond à une ligne dans la table produit?"

"Oui," répondit James, "Mais c'est un peu plus vicieux que ça. '0' signifie qu'ils ne peuvent pas vendre,'1' signifie qu’ils peuvent,"-" signifie qu'il n'y a pas de tel produit avec cet ID et '2', '3', '4' - jusqu'à '9', signifient tous des choses différentes. Comme '3' qui veut dire que l'agent a reçu une formation sur la ligne produit mais n'est pas autorisé à le vendre, et ainsi de suite."

David plongea sa tête dans ses mains pendant un bref moment. "Donc comment  est-ce que je fais exactement pour développer la fonctionnalité 'retourner les agents par produit'?"

"Et bien," dit James en faisant un clin d'œil, "ça devrait être plutôt facile."