nlc Le mieux est l'ennemi du bien | Reprise du message précédent :
anapajari a écrit :
Si c'est du 1-0,1 en théorie tu balourdes tout dans la même table avec les champs en question nullable.
|
Ok compris ! Mais ça m'embête, si un jour je dois intégrer un évènement lié à beaucoup de données ça me fera une pagaille de champ dans la table EVENTS
anapajari a écrit :
L'argument "je sais ecrire la requête qui remonte l'info que je veux malgré une structure bancale" est difficilement recevable
La même requête avec "ma" structure donnerait:
Code :
SELECT lpe.value FROM evenement INNER JOIN l_parametre_evenement lpe ON lpe.evenement_id = evenement.id INNER JOIN parametre ON parametre.id = lpe.parametre_id WHERE parametre.code = 'XXX' ORDER BY evenement.date DESC LIMIT 1
|
Sauf que les données appartiennent à qui elles devraient
La date est celle de l'evenement, le code celui du paramètre et la valeur celle qui relit les deux.
|
Ben vu de mon côté de programmeur C embarqué, ça n'est pas bancal Car dans mon applicatif, quand j'ai besoin de récupérer la valeur d'un paramètre, il me semble plus logique de le récupérer dans une table de paramètre toute bête, plutôt que de faire une requête qui fait aussi référence à une table d'évènements.
La table d'évènement à mon sens n'étant qu'une "couche" plus haut niveau qui englobe le nom du paramètre modifié et sa nouvelle valeur, et rajoute un timestamp et un commentaire éditable.
Du point de vue "couche applicative", au niveau de la couche paramètres je n'ai pas besoin (et d'ailleurs on ne peut pas si le code est bien écrit) d'avoir ou récupérer des infos de la couche au dessus. Du coup j'ai tendance à structurer ma base avec le même type de raisonnement
anapajari a écrit :
ouais mais non... pour moi ajouter un paramètre c'est :
- ajouter une entité paramètre (insert dans "parametre"
- créer un evenement "initialisation du parametre" (insert dans evenement)
- lui affecter sa valeur initiale (insert dans lpe)
|
Oui j'ai bien compris Mais toujours depuis mon point de vue de soft embarqué, une table de parametre c'est un peu comme un fichier de config avec une liste de "parametre=valeur".
Si je veux mémoriser un nouveau parametre, je rajoute une ligne nouveauParametre=valeur.
Derrière l'applicatif lit le fichier, si le parametre qu'il cherche n'y est pas, j'initialise à la valeur par défaut et je rajoute la ligne à la fin du fichier "parametre=valeur par defaut".
Effectivement dans le cas d'un fichier il serait idiot à chaque modif de parametre de rajouter une ligne dans le fichier plutôt que de modifier la valeur sur la bonne ligne.
Mais dans mon cas ça à l'avantage de pouvoir faire un suivi des modifications ET de ne pas toucher la structure d'une quelconque table si je dois gérer un nouveau parametre, je rajoute juste un enregistrement avec le nom du nouveau parametre et sa valeur par défaut.
anapajari a écrit :
J'ai vu trop de systèmes qui au départ étaient "juste un petit truc, on va pas se compliquer la base" impossibles à maintenir/faire evoluer à cause de la structure de la bdd pour pas raler ...
A la question "comment organiser mes données de façon optimale" je réponds "pas comme tu es en train de le faire" mais l'essentiel c'est que tu arrives à faire ce que tu veux
|
Je suis confronté au même problème en programmation embarqué, les clients sont spécialistes pour faire évoluer le cahier des charges au gré des avancements Du coup il faut coder intelligemment.
Mais dans le développement dont il est question ici, c'est moi qui établit le cahier des charges
anapajari a écrit :
Sur un "petit projet web", la flemme de pas pouvoir faire href="lechampsdelabase" (et j'aime pas trop le binaire direct dans l'html)
Sur un "gros" projet, le fait que la base peut vite prendre des proportions dementielles (et pb sur backup/restore) + ne pas avoir la main sur le stockage des fichiers.
|
Ben là en l'occurence si je garde la photo dans un blob, dans mon tableau journal lorsqu'il y aura un évènement photo le code html généré sera :
<img src="image.php?id=XXX&mini=1> avec le id correspondant au numéro unique de la photo dans la table PHOTOS.
Le fichier image.php qui permet de renvoyer l'image au navigateur est déjà écrit ça c'était pas dur Donc maintenant en considérant que je garde ces structures de tables :
Table PARAMETERS :
id (clé primaire autoincrement)
name (nom du parametre modifié)
value (nouvelle valeur du paramètre)
|
Table PHOTOS :
id (clé primaire autoincrement)
data (blob de la photo)
data_mini (blob de la miniature de la photo)
|
table EVENTS :
id (integer autoincrement, clé primaire)
date (timestamp, date et heure de la creation de l'enregistement)
lastModification (timestamp, date et heure de la dernière modification de cet enregistement)
code (integer, code d'evenement)
parameter_id (integer, clé etrangère vers le parametre qui a été modifié)
photo_id (integer, clé etrangère vers la photo qui a été uploadée)
comment (text, commentaire éventuel associé à cet évènement)
|
Y a t-il un moyen en une seule requête de récupérer d'un seul coup les champs event.date, event.code, event.photo_id, parameters.name et parameters.value en filtrant sur "code" et plage de "date" ?
Vu que dans la génération de mon tableau "journal" je n'ai pas besoin du blob de l'image (photo_id suffit pour générer ma balise <img> ), le truc vicieux avec les jointures c'est juste pour récupérer parameters.name et parameters.value en fonction de event.parameter_id. ---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
|