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

PHP & Base de données Discussion :

Soucis d'organisation de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut Soucis d'organisation de données
    Bonsoir à tous,
    Pour mes besoins, je souhaite réaliser un module de news pour gérer l'actualité parlementaire. Les choses au parlement sont regroupées en législature. Et dans mon cas une législature coure sur 5 ans. Et chaque année parlementaire(année d'une législature) est divisée en 3 sessions. Celle Novembre, Mars et Juin. Je souhaite donc découpé mes news par législature et session. Retrouver toutes les news d'une session par exemple celle de mars, ou bien par exemple toutes les news d'une législature. Je ne sais donc pas comment tailler ma table ou mes tables à propos. Cela me permettra aussi de classer mes textes de lois dans la même logique (législature et sessions).

    Merci d'avance pour votre aide.

    NB. Les choses pourront s'étaler sur plusieurs sessions.

  2. #2
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Il y a beaucoup de spécialiste dans ce domaine et bien que je ne le sois pas, voilà comment je ferais (ou du moins j'essayerais de faire ):

    Idée 1/ Créer un ou deux champ(s) supplémentaire(s) dans la table news qui représenteraient la législature et la session. ex: 2008:2. Ce codage correspondant à une convention que tu auras définit au préalable avec les utilisateurs.

    Idée 2/ Créer une table législature avec 3 champs: ID_Legislature, Legislature, Session. Cette table est liée à la table News par le champ ID_Legislature.

    J'espère avoir été claire et surtout ne pas être hors sujet.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par riete Voir le message
    Idée 1/ Créer un ou deux champ(s) supplémentaire(s) dans la table news qui représenteraient la législature et la session. ex: 2008:2. Ce codage correspondant à une convention que tu auras définit au préalable avec les utilisateurs.
    je penche plus à cette idée mais avec trois tables :
    table legislatures avec 3 champs id, annee_debut et annee_fin et comme exemple
    id_legis | annee_debut | annee_fin
    1 | 2003 | 2008
    2 | 2008 | 2013

    table sessions
    id_session | mois
    1 | Novembre
    2 | Mars
    3 | Juin

    table news
    id_news | id_legis | id_session | news_titre | news_texte | date_insertion

    Avec cela ca marche, mais j'ai l'impression que le champs id_legis serait inutile. date_insertion étant un datetime, YEAR(date_insertion) me retourne l'année du post de la news et en comparant cette année avec annee_debut et annee_fin de chaque legislature, on peut retrouver la legisture de la news. Je souhaite donc savoir comment faire cette comparaison.
    je pense être claire.

    Meilleures salutations.

  4. #4
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par okoweb Voir le message
    Avec cela ca marche, mais j'ai l'impression que le champs id_legis serait inutile. date_insertion étant un datetime, YEAR(date_insertion) me retourne l'année du post de la news et en comparant cette année avec annee_debut et annee_fin de chaque legislature, on peut retrouver la legisture de la news. Je souhaite donc savoir comment faire cette comparaison.
    je pense être claire.

    Meilleures salutations.
    Eh ben, tu y es arrivé en plus c'est peut être mieux que ce que je t'ai proposé.
    Par contre ton idée de supprimer id_legis n'est pas bonne à mon avis. D'une il te faut une clé primaire sur ta table (mettre annee_debut ou fin n'est pas top), deux, si tu veux que tes requêtes soient performantes, il faut mieux faire une recherche sur un champ indexé et indexer une des années sur une si petite table ?. Utilise ton temps à autre chose que d'essayer d'optimiser des choses qui n'en valent pas la peine.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 63
    Points
    63
    Par défaut
    Je confirme okoweb ta solution est bien bonne pour id_legis ca dépends, je le garderais, ca

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Je suis plutôt d'accord sur la structure que tu as conçue.

    Mais un truc me chiffonne malgré tout, car il est dit que :
    Une législature c'est 5 ans (comme 2003 - 2008)
    Puis chaque année des législatures il y a 3 sessions (Novembre, Mars, Juin)
    Et enfin, chaque News correspond à 1 législature, donc à 1 session.

    Là je veux en venir, c'est que théoriquement, c'est les sessions (table sessions) qui sont liées directement aux législatures, or, cette structure ne le représente pas.

    C'est la table "news" qui fait le lien avec les 2, ce qui est théoriquement pas vraiment la même chose.

    D'ailleurs, on perçoit dans la réalité qu'il y a un phénomène de répétition :
    Tous les ans il devrait avoir 3 sessions, donc 15 sessions pour chaque législature (3 x 5 ans).

    Toujours théoriquement, on devrait avoir ceci :
    legislatures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id_legis | annee_debut | annee_fin
    1        | 2003           | 2008
    2        | 2008           | 2013
    sessions_legis
    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
     
    id_session | id_legis |libelle
    1           | 1         Novembre
    2           | 1         Mars
    3           | 1         Juin
     
    4           | 1         Novembre
    5           | 1         Mars
    6           | 1         Juin
     
    ... etc pour les 15 session de 2003-2008 ...
     
    16        | 2           | Novembre
    17        | 2           | Mars
    18        | 2           | Juin
    ... etc pour les 15 session de 2008-2013 ...
    Puis coté table "news", il n'y plus de "id_session", seulement "id_legis".
    Coté requête, faudra faire une jointure.
    new -> sessions
    sessions -> legis
    Encore que, si on a les 2 infos (les 2 IDs) sur le coude, et qu'on estime fiables, la jointure session/legis peut être évité.
    Il me semble que c'est plutôt comme ceci d'après ce que tu as exprimé, non ?


    A coté de ça, on voit bien que les sessions seront les mêmes tous les ans, qu'il est peut être peu probable que ça change (aussi bien le mois que le nombre/an), mais ça reste néanmoins basé sur une probabilité.
    Encore que là, personnellement je sais vraiment pas.

    Faire 3 lignes/ans, soit 15 tous les 5 ans et 30 tous les 10 ans, c'est très peu.
    L'avantage, c'est qu'il est possible de rajouter autant de sessions par années en cas d'exception, de même de leur donner un libellé individualisé aussi.


    Mise à part ça, ça diffère très peu.
    En espérant aussi ne pas être à coté de la plaque, car les législatures, c'est franchement pas ma tasse de thé.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    @okoweb Conserve ta structure:
    table news
    id_news | id_legis | id_session | news_titre | news_texte | date_insertion

    Si le cycle des Sessions est toujours le même, Novembre Mars Juin, avec simplement 3 enregistrements dans la table Sessions la requête est possible. tu n'auras donc pas de problèmes à trouver une news avec ta structure.

    Je ne partage pas l'avis de RunCodePhp.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par riete
    @okoweb Conserve ta structure:
    Comment peux tu en être aussi certain que c'est la bonne ?

    Pour ma part, je n'ai fais qu'une remarque sur un aspect par rapport à ce qui a été exprimé.
    Personnellement, je ne m'aventurerais pas, à moins de bien maitriser le sujet (les législatures).

    A coté de ça, et juste par curiosité, j'ai jeté un oeil sur un site où le déroulement des législatures étaient très variables :
    Rarement les même mois, rarement le même nombre de session, etc ...
    Il y aurait rien de fixe apparemment.

    M'enfin, Okoweb doit le savoir mieux que nous.


    Citation Envoyé par riete
    Je ne partage pas l'avis de RunCodePhp.
    Il aurait été plus intéressant de dire pourquoi, non ?

    Dans l'absolu on pourrait aussi le faire en une seule et unique table, et on aura aussi aucun mal à retrouver une news, mais vraiment aucun.
    Mais est ce bon pour autant ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #9
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Comment peux tu en être aussi certain que c'est la bonne ?
    Il y a bien longtemps que je ne suis plus certain de rien. Sauf de mon ignorance.
    Pour le sujet qui nous intéresse, à okoweb de légiférer, c'est LA personne de la situation .
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Malgré mon retard, déjà mes remerciements à tous pour vos réactions.
    Citation Envoyé par RunCodePhp Voir le message
    Toujours théoriquement, on devrait avoir ceci :
    ...
    sessions_legis
    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
     
    id_session | id_legis |libelle
    1           | 1         Novembre
    2           | 1         Mars
    3           | 1         Juin
     
    4           | 1         Novembre
    5           | 1         Mars
    6           | 1         Juin
     
    ... etc pour les 15 session de 2003-2008 ...
     
    16        | 2           | Novembre
    17        | 2           | Mars
    18        | 2           | Juin
    ... etc pour les 15 session de 2008-2013 ...
    Puis coté table "news", il n'y plus de "id_session", seulement "id_legis".
    Coté requête, faudra faire une jointure.
    new -> sessions
    sessions -> legis
    Cette organisation me plait beaucoup mais un autre soucis se dessine à l'horizon. Si je souhaite les news de toutes les sessions de Juin d'une législature. Quelle sera la requête? En plus l'insertion des répétions sur le libelle d'une session, des erreurs peuvent s'infiltrer. Exemple : Juin, Jiun... du coup ca devient 2 libelles distincts, et des problèmes surviennent...

    Comment résoudre ce problème?

    Merci d'avance...

  11. #11
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par okoweb Voir le message
    En plus l'insertion des répétions sur le libelle d'une session, des erreurs peuvent s'infiltrer. Exemple : Juin, Jiun... du coup ca devient 2 libelles distincts, et des problèmes surviennent...

    Comment résoudre ce problème?

    Merci d'avance...
    Il y a plusieurs solutions, pour ma part j'utiliserais une liste <select> avec tous les mois. De cette façon aucun risque d'erreur de saisie et tu stock le numéro du mois.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Quelle sera la requête? En plus l'insertion des répétions sur le libelle d'une session, des erreurs peuvent s'infiltrer. Exemple : Juin, Jiun... du coup ca devient 2 libelles distincts, et des problèmes surviennent...
    Il n'y a aucun problème à ce niveau, avec un GROUP BY on peu obtenir juste ce qu'il faut.

    Exemples simples :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT id_legis, libelle
    FROM session_legis
    WHERE id_legis = 1
    GROUP BY libelle
    Si tu est certain qu'il ne pourra jamais avoir plus de 3 libellés différents, rajouter un LIMIT 3 ne mange pas d'pain.
    Mais dans cette exemple, même si cela est inutile, il faudrait quand même choisir une législature en particulier.


    Ensuite, et bien comme le propose Riete, propose un menu déroulant (ou boutons radios, peu importe) lors d'une insertion ou modification.
    En somme, on évite au maximum les saisies, pour justement éviter les erreurs de frappes.

    Si je souhaite les news de toutes les sessions de Juin d'une législature. Quelle sera la requête?
    Quelque chose comme :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT n.id_news, n.news_titre, n.news_texte, n.date_insertion
    FROM news n
    JOIN session_legis sl ON n.id_legis = sl.id_legis
    WHERE id_legis = 1
    AND libelle = 'juin'

    A coté de ça, si dans tes spécifications les mois seront toujours les mêmes (novembre, mars, juin), il faut en être certain aussi, et bien rien empêche de le représenter dans la Bdd en créant/rajoutant ça dans une table.

    table : "legis_libelle"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_legis_libelle | libelle
    3                | mars
    6                | juin
    11               | novembre
    Par sécurité on respecterait quand même l'ordre des mois, ce qui laissera la liberté d'en rajouter au cas où.

    Puis coté session_legis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id_session | id_legis |id_legis_libelle
    1          | 1        | 6 (6 pour Juin donc)
    ... etc ...
    En pratique, il suffit de faire un "SELECT id_libelle, libelle FROM legis_libelle", et on obtiendra juste ce qu'il faut, et ça sans se soucier des doublons pour créer le menu déroulant par exemple.

    Puis pour obtenir toutes les news d'1 législature de Juin :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT n.id_news, n.news_titre, n.news_texte, n.date_insertion
    FROM news n
    JOIN session_legis sl ON n.id_legis = sl.id_legis
    WHERE n.id_legis = 1
    AND sl.id_legis_libelle = 6
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    @RunCodePhp, @Riete : Merci à vous tous. je regarde et reviens à vous. Je pense être au bout du tunnel.

    Meilleures salutations à tous.

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    @RunCodePhp, merci.
    Précision : Les news sont liées plutôt aux sessions et non aux législatures, et les sessions aux législatures. Les jointures font le reste du sale boulot.

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

Discussions similaires

  1. [MySQL] Organisation de données
    Par jeremy_chauvel dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/01/2007, 17h10
  2. Soucis d'accès au données avec IIS
    Par Rouge_XIII dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/10/2006, 17h28
  3. tomcat, upload et organisation des donnèes
    Par Pikwik dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 05/09/2006, 10h59
  4. [SWT]organisation des données dans un gridlayout
    Par whilecoyote dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2005, 17h24
  5. souci sur ajout de données de zone de liste
    Par Tierisa dans le forum IHM
    Réponses: 6
    Dernier message: 27/09/2005, 08h30

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