Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
En reprenant les développements d'un ancien collègue, j'ai pu me rendre compte que les principes élémentaires des bases de données relationnelles n'étaient pas évidents pour tout le monde.

Ainsi, pour gérer le fait qu'une facture était payée, il copiait l'enregistrement de la table factures dans une table factures_payees, qu'il avait recréée à l'identique.

Pour « plus de facilité », la copie se faisait par la commande : INSERT INTO factures_payees (SELECT * FROM factures WHERE id_facture = ###);. PEBKAC.
PEBKAC #7846 proposé par Picc le 24/05/2013 | 31 commentaires | 👍🏽 👎🏽 +168
Ce genre de chose peut se comprendre pour des tables d'archives, pas ce n'est pas le cas ici.
Commentaire #93966 écrit par juu le 24/05/2013 à 12h53 | 👍🏽 👎🏽
Je serais du patron, j'aurais écrit :
INSERT INTO "pole_emploi" SELECT * FROM "salaries" WHERE NOM="<nom_du_gars>"
 DELETE FROM "salaries" WHERE NOM="<nom_du_gars>"

Maqis bon un patron qui touche en SQL, c'est comme Gargamel devenant pote avec les schtroumpfs.
Commentaire #93971 écrit par ygnobl le 24/05/2013 à 13h05 | 👍🏽 👎🏽
Je crois que Gargamel devient pote avec les Schtroumpfs dans un volume de la BD...
Commentaire #93974 écrit par Morrock le 24/05/2013 à 13h32 | 👍🏽 👎🏽
me rappelle des monstruosités que j'avais trouvées dans du code que je devais reprendre… des index mysql sur des varchar, des INSERT INTO TABLE VALUES() sans nommer les champs, ce qui a obligé les gus à créer TROIS tables parlant de factures (ouvertes, payées, et un 3e statut)… au lieu de simplement pouvoir ajouter un champ…

Bref, je vois que le développement pourri a encore de beaux jours devant lui (ce dont je parle doit dater de 8 ans environ… sisi…)

Je compatis, Picc. Sincèrement.
Commentaire #93975 écrit par Tengu le 24/05/2013 à 13h37 | 👍🏽 👎🏽
J'ai mal aux yeux T_T
Commentaire #93982 écrit par Shadam le 24/05/2013 à 14h17 | 👍🏽 👎🏽
Allié serait plus exact. Quand quelque chose les menace tous ^^
Commentaire #93988 écrit par mini le 24/05/2013 à 14h24 | 👍🏽 👎🏽
A mon avis, un boolean, ça prenait plus de place qu'une copie entière de la table, m'voyez.
Commentaire #93989 écrit par neeko le 24/05/2013 à 14h24 | 👍🏽 👎🏽
"des INSERT INTO TABLE VALUES() sans nommer les champs, ce qui a obligé les gus à créer TROIS tables"
Ah bon, pourquoi? Ok, c'est pas terrible de se baser sur la position des colonnes, mais ça s'étend facilement il me semble, par défaut en rajoutant ta colonne et tes nouvelles valeurs en derniers. Ou alors pour des factures tu peux très bien mettre une valeur par défaut pour le statut je pense (pas de maj des requetes), puis le faire évoluer par des updates?
Commentaire #93991 écrit par Noraa le 24/05/2013 à 14h33 | 👍🏽 👎🏽
Pour des performances de fou, il faut rajouter un index discret sur ton champ booléen après !
Commentaire #93992 écrit par Noraa le 24/05/2013 à 14h34 | 👍🏽 👎🏽
mais attention, SQL gère-t-il les trois états d'un booléen?
cf. http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Commentaire #93993 écrit par nouanda le 24/05/2013 à 14h39 | 👍🏽 👎🏽
C'est marrant, mais juste en lisant le début de la phrase "En reprenant les développements d'un ancien collègue ..." je me suis préparé à toutes les horreurs possibles.
Enfin, je _croyais_ être préparé à toutes les horreurs possibles. Je vois que j'ai encore beaucoup à apprendre....
Commentaire #93994 écrit par Youplà le 24/05/2013 à 14h43 | 👍🏽 👎🏽
C'est vrai que quand on pense booléen, on pense "vrai / faux" (la logique même) ... sauf que dans certaines bases (toutes ?) c'est "vrai / faux / nul" qui sont acceptés.
Maintenant, pour l'exemple en question, un petit champ booléen avec FALSE comme valeur par défaut, ça aurait été plus propre, plus simple, plus économe en place et sans doute plus rapide à coder (et à interpréter)...
Décidément, il y en a qui aiment se compliquer la vie !^^
Commentaire #93995 écrit par Youplà le 24/05/2013 à 14h47 | 👍🏽 👎🏽
Ca pose problème (ou pas) s'il y a des homonymes dans la boite...
Commentaire #93999 écrit par Acorah le 24/05/2013 à 15h07 | 👍🏽 👎🏽
Les miens en ont saigné !
Commentaire #94000 écrit par Picc le 24/05/2013 à 15h09 | 👍🏽 👎🏽
Là ce n'est pas seulement avec les bases de données relationnelles qu'il a un problème, c'est entre ses deux oreilles...
Commentaire #94001 écrit par Acorah le 24/05/2013 à 15h10 | 👍🏽 👎🏽
Merci beaucoup ! En plus, ce n'est qu'un échantillon !
Commentaire #94002 écrit par Picc le 24/05/2013 à 15h10 | 👍🏽 👎🏽
Ce qui situe le problème entre une chaise, un clavier, une oreille droite et une oreille gauche ... il ne peut pas nous échapper, chef !
Commentaire #94003 écrit par Picc le 24/05/2013 à 15h15 | 👍🏽 👎🏽
Surtout que comme le dit Tengu juste au-dessus, avec des requêtes comportant des colonnes non nommées si une table change l'autre doit changer dans la foulée sous peine d'explosage d'application à la face ^^
Commentaire #94008 écrit par Shadam le 24/05/2013 à 15h41 | 👍🏽 👎🏽
On ne connait pas la taille de l'entreprise.

Ceci est un approche utilisé dans les très grosses boites (mutuelles par exemple). Le but est de garder la table "factures" la plus petite possible pour accélérer accès aux données courants. Les facturés payés (et donc "archivés") ne seront plus jamais accédés dans la majorité des cas !

Attention, tout ceci est viable seulement si il y a un "delete from facture where id = ###" qui suis l'insert !
Commentaire #94010 écrit par Jurion le 24/05/2013 à 15h54 | 👍🏽 👎🏽
Au pire du pire, tu rajoutes un champ numérique avec 0/1/2, ça prend quand même monstrueusement moins de place
Commentaire #94017 écrit par defunes43 le 24/05/2013 à 16h25 | 👍🏽 👎🏽
Non, là on a (enfin on avait, car j'ai eu vite fait d'y remettre de l'ordre) deux bonnes grosses tables bien redondantes, sans but d'archivage. Avec, qui plus est, une désynchronisation entre les enregistrements qui évoluaient dans une table et pas dans l'autre ...
Commentaire #94021 écrit par Picc le 24/05/2013 à 16h44 | 👍🏽 👎🏽
C'est beau :)
Commentaire #94022 écrit par Jurion le 24/05/2013 à 16h45 | 👍🏽 👎🏽
"Ceci est un approche utilisé dans les très grosses boites (mutuelles par exemple). Le but est de garder la table "factures" la plus petite possible pour accélérer accès aux données courants. Les facturés payés (et donc "archivés") ne seront plus jamais accédés dans la majorité des cas !
Attention, tout ceci est viable seulement si il y a un "delete from facture where id = ###" qui suis l'insert !"

Je suis DBA et je n'ai jamais vu ça. tu devrais te renseigner sur ce qu'est un datawarehouse et des batchs d'archivage. En plus suivant le moteur de bdd utilisé, le delete risque de bloquer la table en écriture (ex MySQL)
Mais des insert et des deletes fréquents sur la même table dégradent les performances
Commentaire #94057 écrit par Kaoru le 24/05/2013 à 19h24 | 👍🏽 👎🏽
Y en a pas un aussi où il perd la boule ?
Commentaire #94074 écrit par Kebukai le 24/05/2013 à 20h38 | 👍🏽 👎🏽
Bon la c'est un PEBKAC mais le problème avec les PEBKAC SQL c'est que parfois le contexte est très important et donc on peut pas trop juger...
Commentaire #94078 écrit par MrWhite le 24/05/2013 à 20h44 | 👍🏽 👎🏽
On attend le reste avec impatience !
Commentaire #94079 écrit par Aaargh!!! le 24/05/2013 à 20h45 | 👍🏽 👎🏽
Ce qui me semblait le plus important, c'était justement ce décalage que j'imagine non géré ! C'est là le plus gros des soucis, en imaginant que le gars n'ait pas d'expérience. Après, que ce soit écrit avec les pieds, si il n'y avait pas d'erreurs de gérées, on se retrouverait face à un OS commercial bien connu et très largement diffusé, donc très dispendieux en place.
Commentaire #94080 écrit par Aaargh!!! le 24/05/2013 à 20h52 | 👍🏽 👎🏽
Oui, à côté de ça,; j'imaginais que le gars ne traitait pas non plus l'effacement. Après, si on a un bon transfert... ça peut le faire.
Commentaire #94082 écrit par Aaargh!!! le 24/05/2013 à 20h53 | 👍🏽 👎🏽
Mettre en place deux tables à garder absolument identiques et cohérentes, gérer un insert + delete pour le transfert, tout cela pour un hypothétique gain de perf sur la table la plus utilisée ? faut vraiment qu'il y ai un énorme problème de perf et qu'il n'y ai pas d'autre solution utilisable, comme un partitionnement de la table par année

Je dirais que c'est une aussi bonne solution que d'utiliser des triggers ...
Commentaire #94100 écrit par Sly le 24/05/2013 à 21h58 | 👍🏽 👎🏽
Ici, je ne crois pas qu'il s'agisse d'un problème de texte.
Commentaire #94119 écrit par ygnobl le 25/05/2013 à 02h44 | 👍🏽 👎🏽
"Un volume de la BD"...

Je ne sais pas si le jeu de mots est volontaire mais pas mal!
Commentaire #94196 écrit par Delphine le 25/05/2013 à 12h54 | 👍🏽 👎🏽