IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WebDev Discussion :

Champ dynamique dans un fichier HF [WB24]


Sujet :

WebDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Espagne

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut Champ dynamique dans un fichier HF
    Bonjour à toutes et tous,

    Je ne sais si l'intitulé est assez parlant ou non (je pense que non )

    Je vous explique le cas qui m'occupe et j'espère que ma question en intéressera plus d'un(e).

    Je reprend le cas du développement d'un site pour un restaurant qui désire mettre sa carte en ligne. Comme vous le savez certainement, la Loi oblige de mentionner si un plat comporte des allergènes ou non. J'ai donc créé un fichier HF reprenant les 14 allergènes avec leurs descriptions (en 4 langues) ainsi qu'une image.

    Dans le fichier qui reprend les plats servis, il y a UN champ qui contient l'identifiant allergène. Or, un plat peut comporter PLUSIEURS allergènes, ce qui complique le fichier.

    Par exemple, une omelette nature comprend 1 allergène (les œufs). Par contre, une omelette Fromage en a 2 (les œufs et produit laitier). Les Pizzas peuvent en avoir jusqu'à 7 ou 8. Les paellas en ont 4.

    Je pourrais bien entendu, pour tous les plats créer un champ « Nombre d'éléments allergènes » et 14 champs booléens « Identifiant allergène » référencé [1], [2], ...[14] mis à FAUX ou VRAI selon l'allergène concerné. Mais ça me semble être d'une lourdeur sans nom pour le fichier et pas facile à gérer.

    Quelqu'un aurait-il une idée pour régler cela de manière plus rationnelle ?

    Merci de vos réponses, bons développements et ... prenez soin de vous.

    Alain.

  2. #2
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 590
    Par défaut
    Bonjour,

    C'est plutôt une question MCD/MLD que WebDev.

    Pour répondre à ta question. Pour moi, il y a 2 solutions :
    - Celle qui est préconisée (rejoint un peu ton idée) : Tu créées un table (un fichier HF donc) qui aura 2 rubriques : AllergènesPlat(idplat, idAllergène). Les 2 rubriques sont clés avec doublons. Lorsque tu lis un plat, tu as l'idPlat et ainsi, tu récupères tous les allergènes dans cette table.

    - Un méthode "astuce" : tu ajoutes une rubrique Allergène (chaîne) à ta table Plat, qui contiendra la liste de tous les idAllergène du plat séparés par un ;.

    Je préfère la première, car plus propre. Le temps de dév est similaire. Pour moi, il semble plus facile d'ajouter/supprimer dans une table que de manipuler la chaîne pour rechercher les id.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 31
    Par défaut
    Bonjour,

    Je suis d'accord, la version avec un fichier de relation Plat / Allergène est la plus classique et la plus efficace.
    Elle permet par exemple de faire une recherche de tous les plats avec un allergène particulier d'une simple requête, ce que la deuxième option ne permet pas sans lire tous les plats.

  4. #4
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Espagne

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut
    Bonjour mes amis développeurs,

    Un grand merci pour vos réponses Frenchsting et Frankgth.

    J'ai suivi ton conseil Frenchsting et effectivement cela fonctionne bien. Mais comme je le redoutais, la table AllergenesPlat va contenir énormément de records. J'ai testé cela sur l'un des fichiers qui s'appelle « MenuduJour » et qui reprend les plats du jour pour 6 jours de la semaine.

    Tenant compte du fait que l'application est développée en 4 langues (donc des IdPlat différents forcément et liés au NationCode ce qui porte la table à 24 enregistrements) et en fonction des allergènes des différents plats, l'estimation du nombre de records de cette table est déjà à 108. Et ce n'est que le menu de la semaine. Reste la carte.

    J'avais pensé créer une table d'équivalence pour diminuer la nombre d'enregistrements. Je vous explique par un exemple concret.

    Prenons le steak sauce poivre vert. Dans ma table MenuduJour, j'ai 4 enregistrements concernant ce menu avec identifiants 5 (FR), 11 (ES), 17 (EN) et 23 (NL) pour les 4 langues du projet. Il y a 7 allergènes pour ce plat donc 28 records dans la table AllergenesPlat.

    Mon idée (qui est en fait un mix de tes suggestions Frenchsting) est de créer une table qui contiendra 6 enregistrements (pour les 6 plats de la semaine) avec comme clé unique les IDMenuduJour en FR (dans mon exemple « 5 ») et un champ de type chaine reprenant les IDMenuduJour des autres langues séparés par des « ; » (soit 11;17;23), ce qui diminuera très fortement le nombre d'enregistrements (6 dans la table d'équivalence et 6 dans la table AllergenesPlat).

    Il n'est peut-être même pas nécessaire de créer une table d'équivalence mais d'ajouter le champ de type chaine dont je parle directement dans la table AllergènesPlat.

    J'espère avoir été clair dans mes explications. Qu'en pensez-vous ?

    Je vous joint copie du code SQL de la requête de sélection test ci-dessous.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT 
    	MenuduJour.Description AS Description,	
    	MenuduJour.NationCode AS NationCode,	
    	MenuduJour.IDMenuduJour AS IDMenuduJour,	
    	AllergènesPlat.IdPlat AS IdPlat,	
    	AllergènesPlat.IdAllergene AS IdAllergene,	
    	ElementsAllergenes.Image AS Image
    FROM 
    	AllergènesPlat,	
    	ElementsAllergenes,	
    	MenuduJour
    WHERE 
    	MenuduJour.NationCode = 5 //*Code langue FR pour le test *//
    	AND	MenuduJour.IDMenuduJour = 5 //* Code ID du Steak sauce poivre vert pour le test requête *//
    	AND	AllergènesPlat.IdPlat = MenuduJour.IDMenuduJour
    	AND	ElementsAllergenes.IDElementsAllergenes = AllergènesPlat.IdAllergene

    Dont voici le résultat :

    Nom : Annotation 2020-07-02 110244.jpg
Affichages : 395
Taille : 67,4 Ko

    Merci de m'avoir lu et amicales salutations.

    Alain.

  5. #5
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 590
    Par défaut
    Bonjour,

    j'ai une petite question : c'est quoi pour toi beaucoup d'enregistrements ? Pour te donner un ordre d'idée de ce que je concerne comme beaucoup. Dans mon projet principal, j'ai une table article qui contient grosso-modo 1 234 000 enregistrements. Un enregistrement est composé d'une cinquantaine de rubriques...
    Si tu as quelques centaines d'enregistrements dans ta table, la lecture est quasi instantané.

    Pour ton souci initial, je pense que tu pars dans une mauvaise direction : imaginons un plat : omelette.
    En français: omelette
    En anglais : srambled eggs
    Pour moi, c'est le même plat avec des traductions différentes. Tu dois avoir une clé identique pour ce plat. Appelons là CléPlat. Ta table plat devient : plat(idpalt, CléPlat, idLangue, NomPlat,...)

    Du coup, pour ta table des allergènes : Allergènes(idAllergène, CléAllergène, NomAllergène, idLanque). tu auras dans ta table :
    1, 1, 'Oeuf', 5
    2, 1, 'Egg', 3
    3, 2, 'Noix", 5
    4, 2, 'Nut',3

    Tu n'as pas à modifier la table de liaison Allergène_Plat.

    Par contre, tu vas devoir gérer 2 compteurs dans une table compteurs(NomCompteur, ValeurCompteur) :
    Dedans, tu auras le compteur des plats et le compteur des allergènes.

  6. #6
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Espagne

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut
    Muchas gracias Frenchsting, merci beaucoup ! Cette fois encore, tes précieux conseils m'ont permis de sortir de l'impasse.

    Une photo d'écran montrant le résultat.

    Nom : Menu Semaine.jpg
Affichages : 385
Taille : 244,7 Ko

    T'es un Chef !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Problème]Nombre et nom des champs dynamiques dans un form
    Par julienOriano dans le forum Struts 1
    Réponses: 17
    Dernier message: 10/04/2007, 15h32
  2. Champ dynamique dans une table
    Par stef_078 dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2007, 18h09
  3. Création de champ dynamique dans un formulaire
    Par alex75 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/04/2006, 16h00
  4. Enregistrement d'une variable dynamique dans un fichier
    Par zarbydigital dans le forum Langage
    Réponses: 13
    Dernier message: 24/12/2005, 21h28
  5. champ dynamiques dans une procedure stockée
    Par augereau dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/11/2005, 07h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo