Discussion: Distribution de colis

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2015
    Messages : 4
    Points : 1
    Points
    1

    Par défaut Distribution de colis

    Bonjour,

    Je n'ai plus pratiqué depuis longtemps et je n'arrive pas à résoudre mon problème.
    J'organise la distribution de colis d'aliments à des bénéficiaires.

    D'un côté, j'ai les bénéficiaires (familles composées de plusieurs membres) : id_beneficiaires, nom_beneficiaire, nombre_de_membres, adresse_beneficiaire.

    Ensuite, j'ai un stock d'aliments : id_aliment, nom_aliment, nombre_aliments

    J'ai encore des colis composés d'aliments en quantités différentes selon le nombre de membres dans la famille.

    Enfin, j'ai des dates de distributions : id_distribution, date_distribution.

    Pour une date donnée, tous les bénéficiaires peuvent recevoir un nombre maximal d'aliments par rapport au nombre de membres qui composent la famille.

    Exemple simple :

    Pour une date de distribution donnée :
    le 1-09-2017
    Beneficiaire 1 = 3 membres
    peut recevoir un colis de maximum 3 bouteilles de lait
    peut recevoir un colis de maximum 1 paquet de café

    Benficiaire 2 = 5 membres
    peut recevoir un colis de maximum 5 bouteilles de lait
    peut recevoir un colis de maximum 2 paquets de café.

    Donc je crée une entité date_distribution
    id_distribution
    date_distribution
    fk_id_beneficiaire
    fk_id_colis
    nombre_colis

    et c'est là que je coince.
    faut-il indiquer, dans cette entité, pour une date donnée, autant de fk_id_bénéficiaires puis de fk_id_colis par fk_id_bénéficiaires (cartésien) pour le nombre d'éléments dans chaque colis ?
    Je trouve ça illogique...
    Je sais que je suis dans l'erreur mais je n'arrive pas à trouver la piste de solution sur le web qui me permet de créer efficacement mes cardinalités...

    Si vous pouvez m'éclaircir?

    merci.
    Dominique

  2. #2
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 923
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    Vos règles de gestion ne sont pas clairement écrites, or il faut commencer par là, mais au vu de l'énoncé, je dirais quelque chose comme ça :

    [ALIMENT] 0,n ---(distribuer) --- 1,n [DISTRIBUTION] (1,1) --- (bénéficier) --- 0,n [FAMILLE] 1,n --- (composer) ---1,2 [MEMBRE]

    Ce qui donnerait les tables
    ALIMENT_AL (AL_id, AL_nom, AL_qté_par_pers, AL_unité_mesure)
    DISTRIBUER_DB (FA_id, DI_id, AL_id DB_qte)
    DISTRIBUTION_DI(FA_id, DI_id, DI_lieu, DI_date)
    FAMILLE_FA(FA_id, FA_nom, FA_numero, FA_date_enregistrement)
    COMPOSER_CO(FA_id, MB_id, date_début, date_fin)
    MEMBRE_MB(MB_id, MB_nom, MB_prénom, MB_dtnais)

    J'ai supposé qu'un bénéficiaire pouvait recevoir de l'aide au travers de plusieurs (2) familles. C'est la raison pour laquelle j'ai relié la distribution à la famille et non à ses membres.
    Ex : cas d'une famille recomposée, les enfants peuvent recevoir l'aide via la famille du père quand ils sont chez lui ou de la mère quand ils sont chez elle.
    Si ce n'est pas le cas, alors la distribution doit être attribuée non pas à la famille, mais à chacun de ses membres, qu'il faut constituer en une et une seule famille, ce qui change le modèle
    D'où l'importance des règles de gestion.

    Un remarque d'ordre secondaire mais qui pourrait être source de conflits : si vous mesurez en bouteille ou en boite, comme c'est très peu précis, vous risquez de donner des bouteilles de 20 centilitres à une famille et de 1,5 litres à une autre soit une répartition très inégale

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2015
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bonjour,

    En effet et j'en suis conscient : mes règles de gestion ne sont pas clairement écrites.
    J'ai voulu faire simple dans mon explication, et visiblement trop simple pour être efficace.

    Nous disposons d'un stock d'aliments à distribuer aux bénéficiaires du CPAS.
    Je ne connais pas le stock qui sera disponible pour chaque aliment, donc, j'indique des valeurs arbitraires.

    Exemple non-exhaustif :
    5000 bouteilles de lait demi-écrèmé de un litre;
    3000 kg de sucre en morceaux de un kilo;
    300 boites de semoule à Couscous de 500 gr;
    1200 bocaux de pois et carottes de 370 gr;
    2400 boites de soupes de tomates/légumes d'un litre.
    etc.

    Le responsable des distributions a déterminé que :
    pour un ménage composé d'une personne, il peut donner par distribution une bouteilles de lait d'un litre;
    pour un ménage composé de deux personnes (adultes et enfants confondus), il peut donner par distribution 2 bouteilles de lait d'un litre;
    pour un ménage composé de trois personnes (adultes et enfants confondus), il peut donner par distribution 4 bouteilles de lait d'un litre;
    pour un ménage composé de quatre personnes (adultes et enfants confondus), il peut donner par distribution 5 bouteilles de lait d'un litre;
    il en est de même pour tous les aliments mais dans des proportions différentes.

    Si un membre de la famille quitte le ménage, le ménage n'est plus composé que de n personnes -1.
    Le nombre de membres de la famille du bénéficiaire est modifié en temps réel.

    Ces aliments seront distribués une fois par mois.
    Donc un maximum d'un douzième du stock peut être distribué à chaque occasion.

    J'ai fait un calcul qui détermine les limites à distribuer en fonction du stock.
    En effet, si le nombre d'aliments disponibles est inférieur au nombre nécessaire sur l'année, un calcul est refait au pro-rata du stock disponible.

    Terminologie :
    Le "bénéficiaire " est la personne qui reçoit les aliments du "ménage" (chef de famille) et les membres de sa famille sont comptés sans distinction de l'âge. (choix de l'utilisateur responsable des distributions)

    On considère qu'on distribue tous les aliments autorisés à chaque distribution.

    pour les ménages de 1 personnes il peut distribuer :
    5000 bouteilles de lait / 12 distributions : 416 bouteilles entières dont 1 pour le ménage. Il y a 83 ménages soit 83 bouteilles
    pour les ménages de 2 personnes il peut distribuer :
    5000 bouteilles de lait / 12 distributions : 416 bouteilles entières dont 2 pour le ménage. il y a 85 ménages soit 170 bouteilles
    pour les ménages de 3 personnes il peut distribuer :
    5000 bouteilles de lait / 12 distributions : 416 bouteilles entières dont 4 pour le ménage. Il y a 28 ménages : soit 112 bouteilles
    pour les ménages de 4 personnes il peut distribuer
    5000 bouteilles de lait / 12 distributions : 416 bouteilles entières dont 5 pour le ménage. Il y a 10 ménages : soit 50 bouteilles

    Les 416 bouteilles seront distribuées chaque mois.
    Il en restera une à la fin de chaque distribution qui est remise dans le stock pour le cas où il se produit une casse, ou un nouveau bénéficiaire s'inscrit par exemple.

    Pour une famille de 3 personnes le colis se compose de
    4 bouteilles de lait;
    2 kg de sucre en morceaux;
    1 boite de semoule de couscous;
    1 paquet de café;
    etc.

    J'ai donc 12 dates de distributions
    Les bénéficiaires sont identifiés par le carte d'identité.
    Ce qui permet au programme de dire combien de chaque aliment le responsable peut distribuer.
    [ALIMENT] 0,n - - distribuer - - 1,n [DISTRIBUTION] 1,n - - beneficier - - 1,n [BENEFICIAIRE]


    Aliment
    Aliment_id
    Aliment_nom
    Aliment_nombre


    Beneficiaire
    Beneificiaire_id
    Beneficiaire_nom
    Beneficiaire_RN (Numéro d'inscription au registre nationnal)
    Beneficiaire_nombre


    Distribution
    Distribution_id
    fk_aliment_id
    Distribution_date
    fk_beneficiaire_id
    aliment_nombre


    Mais je suis peut-être dans l'erreur... parce que je ne rencontre pas votre avis...
    Sans doute la fatigue.
    Est-ce que c'est mieux?

    Dominique

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    août 2007
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : août 2007
    Messages : 790
    Points : 1 970
    Points
    1 970

    Par défaut

    Bonjour Dominique,

    Le modèle que tu proposes répond au besoin. En ce sens, il est correct.
    On peut toutefois l'améliorer en considérant qu'une distribution est l'association entre Bénéficiaire, Aliment et Date de distribution.

    Code : 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
    17
                                [Bénéficiaire]
                                      |
                                     0,n
                                      |
                                      |
    [Date_distribution]--0,n----(Distribution)
                                      |
                                      |
                                     0,n
                                      |
                                  [Aliment]
    
    Légende :
    -------------
    [ENTITE]
    (ASSOCIATION)
    La table issue de l'association Distribution aura alors cette définition :

    Distribution (Beneficiaire_id, Aliment_id, Distribution_date, quantite)


    Deux remarques :

    1) J'ai remplacé "aliment_nombre" par "quantite" car la propriété "aliment_nombre" existe déjà dans l'entité Aliment. Or, une propriété conceptuelle doit être unique dans un MCD.

    2) Pourquoi l'association Distribution est-elle préférable à l'entité Distribution ? L'association garantit que le triplet {Beneficiaire_id, Aliment_id, Distribution_date} est unique dans la table Distribution. Cette garantie n'est pas fournie par l'entité Distribution. En effet, en l'absence de contrôle programmatique, on pourrait se retrouver avec quantité de doublons dans cette table. Exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Distribution_id Beneficiaire Aliment Date
    --------------- ------------ ------- ----------
    1               Martin       Lait    01-09-2017
    2               Martin       Lait    01-09-2017
    etc.
    Pour éviter ces doublons, il faudrait mettre en place des contrôles avant insertion d'une ligne dans la table.
    Avec l'association Distribution, c'est le SGBD qui prend en charge ces contrôle de façon automatique.
    Modérateur du forum Schéma

    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2015
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bonjour JPhi33,

    Merci pour ces lumières.
    Je comprend.
    En tous cas, j'espère.

    C'est vrai que je me disais qu'il y avait quelque chose qui n'était pas efficace...

    Donc pour une date de distribution donnée
    j'aurai une ligne différente pour chaque bénéficiaire et pour chaque aliment

    pour faire simple en supposant que j'ai seulement 3 bénéficiaires et 3 aliments
    il y aura
    une ligne avec : l'identifiant du bénéficiaire 1, l'id de l'aliment 1, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 1, l'id de l'aliment 2, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 1, l'id de l'aliment 3, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 2, l'id de l'aliment 1, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 2, l'id de l'aliment 2, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 2, l'id de l'aliment 3, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 3, l'id de l'aliment 1, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 3, l'id de l'aliment 2, le 1ier septembre 2017, le nombre
    une ligne avec : l'identifiant du bénéficiaire 3, l'id de l'aliment 3, le 1ier septembre 2017, le nombre

    En avançant dans ma construction . . .
    Si un bénéficiaire n'est pas là, on précisera le nombre "0" pour cette personne-là à cette date-là plutôt que de ne pas mettre la ligne.

    En effet, je me dis que je vais insérer toutes les lignes d'emblée pour chaque nouvelle date de distribution dans ma base de données et que je ne mettrai de valeur (nombre) que pour les personnes qui seront venues chercher leur colis d'aliments.

    Si je me trompe, n'hésitez pas à m'en faire part.
    Dominique

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    août 2007
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : août 2007
    Messages : 790
    Points : 1 970
    Points
    1 970

    Par défaut

    Bonjour Dominique,

    Citation Envoyé par ddommii Voir le message
    Si un bénéficiaire n'est pas là, on précisera le nombre "0" pour cette personne-là à cette date-là plutôt que de ne pas mettre la ligne.

    En effet, je me dis que je vais insérer toutes les lignes d'emblée pour chaque nouvelle date de distribution dans ma base de données et que je ne mettrai de valeur (nombre) que pour les personnes qui seront venues chercher leur colis d'aliments.
    Quand tu insères les lignes pour une date de distribution donnée, est-ce que tu valorises la quantité à distribuer pour chaque bénéficiaire / aliment ?

    Si oui, je te propose une alternative qui consiste à ajouter, dans l'association Distribution, soit un indicateur "délivré", soit une propriété "quantité_délivrée". En effet, remplacer la quantité prévue par 0 est une perte d'information (laquelle pourrait être utile, par exemple, pour faire des statistiques ou comptages).
    L'option "quantité_délivrée" est peut-être préférable pour prévoir les cas où des bénéficiaires ne prendraient pas la quantité totale d'un des aliments de son colis.
    Modérateur du forum Schéma

    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2015
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Très bien vu ! ! !

    Le fait d'enregistrer la quantité délivrée permettra aussi de mettre le stock disponible à jour.
    Ce qui permettra de calculer le nombre à distribuer pour chaque aliment pour la prochaine distribution...

    En effet, il arrivera qu'un bénéficiaire ne prenne pas un aliment : cet aliment peut dès lors être délivré lors d'une prochaine distribution...


    Donc, j'aurai d'une part l'affichage, pour chaque aliment, du nombre à distribuer par défaut à chaque bénéficiaire (en fonction du nombre de membres de son ménage) et
    d'autre part j'aurai un champs texte dans lequel je pourrai indiquer le nombre d'aliments délivrés en réalité.
    L'enregistrement se fera sur base du nombre par défaut si le champ texte est vide, sinon, il enregistrera la valeur entrée au champ texte.

    Je crois que c'est complet maintenant et je me dis que je n'y serais pas arrivé sans tes suggestions.

    Il y a trop longtemps que je n'ai plus fait d'analyse...
    C'est cool de ta part.

    Merci.
    Dominique

Discussions similaires

  1. Création JPopupMenu avec plusieurs niveaux
    Par gpcanto dans le forum AWT/SWING
    Réponses: 2
    Dernier message: 01/06/2006, 08h50
  2. [Hibernate] Héritage sur plusieurs niveaux
    Par srvremi dans le forum Hibernate
    Réponses: 2
    Dernier message: 31/05/2006, 18h39
  3. Apache 1.3 VirtualDocumentRoot à plusieurs niveaux
    Par marcha dans le forum Apache
    Réponses: 1
    Dernier message: 25/05/2006, 20h30
  4. Plusieurs niveaux de colonnes dans TDBGrid
    Par TicTacToe dans le forum Composants VCL
    Réponses: 4
    Dernier message: 31/01/2006, 10h44
  5. Création de plusieurs niveaux de sous formulaires
    Par Farbin dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2005, 20h15

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