|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||||||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 6 ![]() |
Bonjour à tous,
alors voilà je vous expose mon problème, je suis actuellement en train en train d'écrire un petit script qui est sensé récupérer des données dans un array pour les afficher sous forme de tableau et je suis face à 1 gros problème qui a parasité toute mon attention depuis avant-hier soir et qui concerne la structure de la base de donnée qui se présente comme cela actuellement : Code :
Code :
Je veux récupérer toutes les informations contenues dans la base de donnée et les afficher ensuite dans un tableau de ce genre : Citation:
Code :
"SELECT * FROM membre ORDER BY titre, nom"
Je m'interroge donc s'il ne serait pas mieux de séparer cette table en 2 en créant par exemple une table membre qui enregistrerais tous les membres de type 0 (qui n'ont pas de titre) et une table membre_sup qui enregistrerais tous les membres de type 1 (qui ont un titre) sachant que ma table membre est reliée par le champ id à une table contact qui stocke des contacts et qui prend cette forme: Code :
Code :
|
|||||||||
|
|
00
|
|
|
#2 | |||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 707 ![]() |
Salut
Citation:
Si on fait ça de manière assez scolaire, donc stricte, et bien on s'aperçoit que la donnée "titre" est dépendante de "type". Au bout, il peut avoir des incohérences entre ces 2 données, comme avoir un contenu au niveau du titre alors que la valeur de "type" est 0 (qui signifie "Pas de titre"). Rien que ça signifie que les données "type" et "titre" ne devraient être dans une même table, mais à part. Enfin, si on est stricte. Mais encore, (apparemment), dans le cas où le "type" est 0 (pas de titre), faudrait exploiter le "nom/prenom" à la place. Au feeling comme ça, je verrais quelque chose comme : membre Citation:
Citation:
Par contre, j'ai quand même mis le "type" dans cette table "membre_type", mais ça dépend de ce que représente un type. Si un "type" est une personne ayant un "titre" (ce qui a l'air d'être le cas), alors le champ "type" est inutile. Le simple fait d'être présent dans cette table signifie que le membre a un type 1. Si à l'avenir il peut avoir plusieurs autres types (0, 1, 3, etc ...) alors il est peut être nécessaire. Coté SQL, il faudra faire une jointure sur les 2 tables. Puis avec une condition au niveau du champ on peu faire les remplacement. Exemple : Code sql :
__________________
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] |
|||||
|
|
00
|
|
|
#3 | |||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||
|
00
|
|
|
#4 | ||||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 6 ![]() |
Hmmm je suis tellement concentré sur ce problème que même en essayant d'être clair j'arrive à ne pas l'être
![]() Je vais bien exposer les relations entre les bdd et le but du script voilà en faite je dois gérer l'insertion, l'édition, la suppression et l'affichage d'une base de donnée qui contient une liste de membres, je m'explique: actuellement j'ai une seule table membre qui contient tous les membres enregistrés sachant qu'il n'y a que 2 types de membres: les membres "standard" et les membres "premium" défini par le champ type, dans cette table qui incrémente automatiquement un id à chaque nouvelle entrée je stock les infos des membres à savoir leur nom, prénom, mail et je possède aussi un champ titre différent pour chaque membre car c'est le membre qui se l'attribue (c'est un nom de guilde mais il peut y en avoir 2 similaires dans la bdd car les membres possèdent aussi un champ serveur mais ça je peux le gérer, le soucis n'est pas vraiment là) voilà pour la structure actuelle : Code :
Code :
Voilà merci d'avance. |
||||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 707 ![]() |
Ce que je te proposais c'est quasi la même chose de ce que tu as fais.
Faut juste supprimer le champ "type", car tu confirme maintenant qu'il y aurait que 2 types. Et puis renommer "membre_type" en "premium" et on a la même chose. Sauf que la table "premium" ne devrait pas avoir d'ID auto_incremente, juste l'Id des membres. Mettre juste comme clé primaire "id" et comme valeurs les IDs de membre. Il ne pourra pas avoir 2 fois le même membre. Et la table "standard" est inutile car elle ne contient rien d'autre que les mêmes IDs que la table "membre". (de même qu'il ne doit pas avoir 2 fois le même membre). Faut juste percevoir que le seul fait qu'un membre soit présent dans la table "premium", c'est justement un premium, et que sa non-présence c'est qu'il sera alors "standard". Présent (1) -> Premium Pas présent (0) -> Standard. La notion de "type" se fait quasi naturellement, cette information (0 ou 1) est inutile, elle fait même doublon et du coup être contradictoire avec les enregistrements dans "premium". En somme, imagine que tu mettes comme type 1 et que l'id correspondant ne se trouve pas dans la table "premium", c'est contradictoire, c'est un risque de bug au niveau du code (php). Même chose inversement : type 0 alors que l'id est présent. Puis les noms, prénom seraient mieux dans la table "membre" comme tu l'as fais au départ au lieu de "contact", car ça me semble plus naturel. Pour la table "contact", je ne sais pas trop ce quelle représente. Si c'est une liste de contact des membres ou si c'est une table qui offre la possibilité qu'un membre ait plusieurs adresses mails. Faut voir. Enfin, tout ça bien sûr si j'ai bien compris.
__________________
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] |
|
|
00
|
|
|
#6 | |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 6 ![]() |
Hmmm effectivement la table standard peut sauter tout comme le champ id auto incrémenté de la table premium, c'est bien vu et ça confirme aussi que je dois vraiment être à la limite du burnout avec ce problème de structure
![]() Pour ce qui est de la table contact en faite elle va contenir le nom, prénom, mail, tel etc etc de toutes les personnes à contacter qui soient en relation avec un membre 'xx' (où xx représente l'id du membre). Citation:
|
|
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 707 ![]() |
Citation:
A part offrir la possibilité qu'un membres ait plusieurs adresses mails ou plusieurs n° tel, etc ... là ça demandera de créer des tables supplémentaires pour représenter ça. Sinon, si un membre à : 1 pseudo, 1 mail, 1 tel, etc ... alors il y a une relation 1-1, donc ces données devraient fusionnées/basculées dans la table "membres". Si c'est une question d'optimisation de vouloir les séparer, faudrait vraiment faire un test si 4 ou 5 champs supplémentaires provoquent un ralentissement des requêtes. 4 ou 5 champs ça me semble peu, pas sûr que ça vaille le coup. Faut 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] |
|
|
|
00
|
|
|
#8 | |||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 6 ![]() |
Effectivement la structure relationnelle convient parfaitement à ce que je veux obtenir (à tête reposée ça semble bien optimisé pour tenir une forte charge)
et j'ai donc adopté une structure à 2 tables: membres et premium pour ce qui est de la table contact en faite elle associe à chaque membre un ou plusieurs contacts (id, id_membre, nom, prenom, mail) qui ne proviennent pas de la table membre et dont j'ai absolument besoin ^^ Maintenant le problème qui se pose c'est lorsque je récupère les informations de la table avec ma requête sql, je m'explique je suis toujours face au même problème que précédemment : admettons que ma table membre soit peuplée de cette manière: Code :
Citation:
|
|||
|
|
00
|
|
|
#9 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 707 ![]() |
Citation:
__________________
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] |
|
|
|
10
|
|
|
#10 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 6 ![]() |
Un énorme merci, ça m'a pris le chou pendant un long moment cette table horrible
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com