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 :

Quel schéma de Table(s) pour système de commentaires


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut Quel schéma de Table(s) pour système de commentaires
    Bonjour,

    Je cherche à faire un système de commentaires. Les commentaires pourront être fait soit sur des personnes, soit sur des articles et soit sur des photos.

    Je me demande si je fais une seule table avec les clé etrangeres vers photos, personnes et articles. Ou bien est-ce qu'il est préferable de faire une table commentaires photos, une autre commentaires articles...

    Qu'en pensez vous ?

    Merci

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salut , tous dépend de votre modélisation !!
    Comment ils sont stockés les personnes , les photos et autres ?
    de là vous pouvez faire un choix.

  3. #3
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    Bonjour,
    Toutes les tables sont séparées et liées par des clé etrangeres genre pour photos:
    idphoto, iduser, nom, largeur...

  4. #4
    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 me demande si je fais une seule table avec les clé etrangeres vers photos, personnes et articles. Ou bien est-ce qu'il est préferable de faire une table commentaires photos, une autre commentaires articles...
    A mon sens il ne devrait pas avoir beaucoup de choix.
    Tout est une question de cardinalités (ou relation) entre chacun d'eux, entre chacune des données.

    - SI pour 1 photo (ou chaque photo) tu souhaites qu'il y ait 1 seul et unique commentaire (1 par photo donc), alors le champ "commentaire" pourra être rajouté à la table "photos".
    Les cardinalités entre photo et commentaires sont : 1-1

    - Par contre, SI pour 1 photo (ou chaque photo) tu souhaites qu'il y ait plusieurs commentaires possibles, alors il faudra créer une table genre "commentaire_photo" pour cela.
    Les cardinalités entre photo et commentaires sont : 1-n


    Faut définir les cardinalités pour ces autres tables, c'est cela qui détermine s'il faut ou pas rajouter une table.

    Pour les commentaire d'articles à mon sens il y a de fortes chance qu'un article pourra avoir plusieurs commentaire, donc des cardinalités : 1-n

    Idem pour les commentaires entre user.


    Tout ça c'est à toi de voir
    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]

  5. #5
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    Les cardinalités seront de 1 a n, ce que je me demande c'est si je fais une seule table commentaires ou faire une table commentaires_photos, commentaires_articles...

  6. #6
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Pour ma part, j'aurais tendance à essayer d'avoir une table par type, de sorte à pouvoir mettre en place une clé étrangère de chaque table commentaire vers chaque source de contenu.

  7. #7
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    mais si j'ai qu'une seule table avec 3 clés etrangeres ? soit je mets l'id soit je mets 0 par exemple, non ?

  8. #8
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    L'idée est vraiment d'avoir une seule foreign key qui lie l'id de la ressource dans les deux tables.

    Si tu mélanges tout, il y aura forcément un moment où tu auras des risques de corruption des données.

  9. #9
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    tu peux plus détailler ton point de vue cela m'interresse stp

  10. #10
    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
    Les cardinalités seront de 1 a n, ce que je me demande c'est si je fais une seule table commentaires ou faire une table commentaires_photos, commentaires_articles...
    C'est justement en définissant son besoin, donc les cardinalités, qui débouche sur le modèle de donnée (table, champs, etc ...).

    Donc si tu dis que les cardinalités sont 1:n, il n'y plus de question à se poser, il me semble l'avoir déjà expliqué.
    Re - exemple.
    On dit que pour 1 article on va avoir plusieurs commentaires (card. -> 1:n) :
    table : article (pour tous les articles) ->
    champs : id (clé primaire)

    table : article_commentaire (pour les commentaires des chaque article)
    champ : id (clé primaire) | id_article (clé étrangère)

    C'est aussi simple que ça.


    Maintenant, quand tu te pose la question s'il faudrait une table "commentaire" seule, donc autre que article_commentaire, on peu supposer que tu souhaiterais un fonctionnement différent.
    Mais c'est purement hypothétique, tu ne l'a pas exprimer jusqu'à lors.
    Pour définir des cardinalités (donc comment structurer ces tables par rapport aux données), il faut avoir les idées claires pour bien exprimer son besoin.

    Je m'explique.
    Prenons cette table "article_commentaire" justement, donc cardinalité : 1:n
    Donc actuellement un article peu être lié à plusieurs commentaires.
    Cependant un commentaire ne peut être lié qu'à 1 seul article (d'où le 1:n).

    Admettons maintenant que ton besoin change, et que tu l'exprime de la façon suivante :
    Un même commentaire pourra être exploité (ou lié) par plusieurs articles.
    Et bien les cardinalités vont automatiquement changés pour ceci : n:n
    Ce n'est plus la même chose.

    Et bien c'est dans ce cas là où il faudra créer (ou rajouter) une table "commentaire" pour y mettre juste les commentaires, et conserver la table "article_commentaire" pour faire les liaisons entre les articles et commentaires.
    Donc 3 tables : article, commentaire, commentaire_article


    Mais admettons que ton besoin évolue encore pour exprimer la chose suivante :
    Un même commentaire pourra être exploité par un article, mais aussi par une photo, voir aussi par les personnes.

    Dans ce cas là, on obtient la même chose que précédemment, c'est à dire qu'il faudrait avoir 1 table "commentaire" et lier cette table avec les divers autres tables, genre article_commentaire, photo_commentaire, user_commentaire.
    On a cette cardinalité là entre commentaire et les autres tables -> 1:n


    Bref.
    Là où je veux en venir, c'est qu'il ne faut pas te focaliser sur les tables, le nombre de table ou encore les clés étrangères, c'est pas la bonne démarche.

    C'est avant tout de bien exprimer son besoin, c'est ce que j'ai fait avec mes exemples (ce sont juste des exemples).
    C'est ça qui va faire qu'on visualisera les cardinalités, et c'est ces cardinalités là qui vont dicter les tables à créer.
    Les clés étrangères vont se dessiner tout naturellement aussi.
    Toujours est il que les clés étrangères ne se mettent pas au pif, au feeling, ou autre façon plus ou moins hasardeuse.


    Par ailleurs, faire autrement ce qu'exprime son besoin (ou les cardinalités), c'est aller au-devant de problèmes, et en général c'est l'application qui va trinquer (le code Php entre autre, le code SQL bien souvent aussi).


    Donc exprime clairement ce que tu veux obtenir, c'est ça la base
    Et il faut le faire pour chaque donnée, donc une par une.
    Disons que certaines sont évidentes, mais attention au piège parfois.

    Tout ça sauf erreur
    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]

  11. #11
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    J'hésitais mais je pense que je vais suivre le modèle que tu as développé :
    Dans ce cas là, on obtient la même chose que précédemment, c'est à dire qu'il faudrait avoir 1 table "commentaire" et lier cette table avec les divers autres tables, genre article_commentaire, photo_commentaire, user_commentaire.
    On a cette cardinalité là entre commentaire et les autres tables -> 1:n

  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
    J'hésitais mais je pense que je vais suivre le modèle que tu as développé
    Comme disait un certain humoriste : C'est vous qui voyez
    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]

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/04/2010, 02h48
  2. Réponses: 10
    Dernier message: 04/03/2008, 11h10
  3. Html et Css pour système réutilisable sur n'importe quel site
    Par dimalta5 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 25/02/2008, 12h21
  4. Quel schéma pour manipuler une table BD depuis un objet ?
    Par caesarvanou dans le forum Design Patterns
    Réponses: 2
    Dernier message: 19/12/2007, 09h29
  5. Quel type de table choisir pour la création d'un forum
    Par Xunil dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 19/11/2006, 12h40

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