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

Schéma Discussion :

Création d'un planning de disponibilités [MCD]


Sujet :

Schéma

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Par défaut Création d'un planning de disponibilités
    Bonjour à tous,

    Tout d'abord, j'ai hésité à choisir cette rubrique, car ma question pourrait aussi se trouver dans la section "Développement", mais bon.
    Voici mon projet : créer un planning de disponibilités de bénévoles, chaque jour de l'année, par tranches dans la journée (matin, après-midi, soir).
    La table des bénévoles sera classique (id du bénévole, nom, téléphone etc.).
    Je ne sais pas bien comment appréhender la chose et j'aimerais avoir quelques idées. Je ne demande pas du tout à ce qu'on me fasse le job ! Mais quelques pistes seraient les bienvenues.
    Faut-il créer une table par jour, avec l'id des bénévoles sur chaque tranche ? Ou une table par mois ? Comment voyez-vous cela ?

    Je partirais bien sur une table contenant tous les jours de l'années, avec pour chaque ligne le jour et les 3 tranches, lesquelles seraient remplies par les id bénévoles, séparés par une virgule, pour traiter ensuite les données avec un formulaire et des cases à cocher.

    Merci d'avance pour vos idées !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Voici mon projet : créer un planning de disponibilités de bénévoles, chaque jour de l'année, par tranches dans la journée (matin, après-midi, soir).
    Je suppose qu'il s'agit de jours calendaires ? C'est à dire que si le bénévole Dupont est disponible le 2 janvier 2024 après-midi, il ne le sera peut-être pas le 2 janvier 2025. Comment pourrait-il d'ailleurs le savoir 1 an à l'avance ?

    Donc oui, il va falloir gérer un calendrier.

    1ère chose à faire : écrire les règles de gestion des données.

    Par exemple :
    R1 : Un bénévole peut-être disponible lors d'une période et une période peut voir la disponibilité de plusieurs bénévoles.

    De cette règle de gestion, on déduit le morceau de MCD suivant :
    Benevole -0,n----est_disponible----0,n- Periode

    Et de ce morceau de MCD, on peut déduire les tables suivantes :
    te_benevole_ben (ben_id, ben_nom, ben_prenom, ben_telephone...)
    te_periode_per (per_id, per_date, per_creneau)
    tj_ben_disponible_per_bdp (bdp_id_benevole, bdp_id_periode)

    Lors de la création de la BDD, il sera utile de créer par procédure SQL le calendrier des périodes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Par défaut
    C'est exactement ça, merci pour ces pistes.
    J'ai effectivement opté (entre autres) pour une table Bénévoles et une table Disponibilités, avec 1 jour par entrée, chaque jour ayant les id des bénévoles dispos séparés par une virgule, facile à afficher ensuite.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 604
    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 : 10 604
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Freedolphin Voir le message
    J'ai effectivement opté (entre autres) pour une table Bénévoles et une table Disponibilités, avec 1 jour par entrée, chaque jour ayant les id des bénévoles dispos séparés par une virgule, facile à afficher ensuite.
    Il ne faut JAMAIS stocker une liste de valeurs dans une même colonne d'une même ligne !
    C'est un viol de première forme normale qui compromet l'intégrité de la base de données, rend les requêtes comples, les performances désastreuses, la fiabilité également... Bref tout ce qu'il ne faut pas faire.

    Ce n'est pas pour rien que Cinephil propose une table de jointure, c'est bien pour avoir une ligne pour chaque combinaison de personne et de période.
    C'est la SEULE modélisation correcte dans votre contexte.

    Pour l'affichage, il suffira de concaténer les différentes valeurs lues en table, rien de plus simple par SQL, en fonction du SGBD, vous utiliserez STRING_AGG(), GROUP_CONCAT ou autre

  5. #5
    Membre éclairé
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Par défaut
    C'est marrant, mais plus on me dit de ne pas faire un truc, plus j'ai envie de le faire.
    Sérieusement, merci pour ces conseils, mais la modélisation plus élaborée que vous proposez est trop complexe pour moi et cette petite appli est réservée à deux ou trois utilisateurs, sur un site privé.
    D'autant que je ne vois pas bien où est le danger, ce n'est qu'un champ texte contenant des "12,34,27" ou "8,17,23,24"...

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 604
    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 : 10 604
    Billets dans le blog
    10
    Par défaut
    Par exemple, comment savoir qui est affecté à la période 2

    Avec votre méthode, pour le savoir parcourir le contenu "12,34,27", trouver les délimiteurs (les virgules), tenir compte que le chiffre "2" n'est pas la même chose que le nombre 2 etc...
    Ensuite, il est impossible de faire une jointure directement entre une sous partie d'une chaine de caractères et l'identifiant de la période sans opérer une fonction, ça signifie qu'aucun index ne sera éligible et que donc les perfs seront très dégradées.
    Enfin et surtout, rien ne vous interdira de créer des périodes qui n'existent pas, de créer plusieurs fois la même période dans la liste pour une même personne, etc. Bref de stocker n'importe quoi

    Ce sont les fondamentaux de la modélisation d'une base de données. La modélisation que Cinéphil et moi-même proposons est très simple et évite tous ces écueils.

    Parcourez l'article sur les formes normales de Wikipédia (en particulier la 1ère d'entre elles puisque c'est de celle-là qu'il s'agit ici)

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

Discussions similaires

  1. [MySQL] Affichage de données dans un planning PHP MYSQL
    Par malipama dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/05/2020, 19h34
  2. Réponses: 1
    Dernier message: 18/01/2013, 13h27
  3. [MySQL] Planning PHP & MySQL
    Par Dime313 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 25/12/2010, 12h25
  4. [MySQL] Création d'un script php/mysql de commentaires
    Par koKoTis dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 18/02/2008, 14h56
  5. [Conception] Cherche tutoriel création de site web (php/Mysql/Javascript)
    Par Skyman57 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/02/2008, 18h29

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