par
Cyrano » 10 oct. 2006, 07:57
Pour mémoire : on ne crée pas des tables au petit bonheur lorsqu'on développe. Une base, ça se construit de façon logique et cohérente. On appelle ça la modélisation.
La premiere chose a faire, c'est de recenser les donnees que tu as besoin de manipuler. Ensuite, tu les tries et tu les regroupes par ensembles qu'on nomme des entités. Et à ce stade, on a pas encore créé la moindre table et la base n'existe pas. Je te recommande l'usage du papier/crayon pour faire ça. Une base mal conçue, ce sont des problèmes à venir en cas d'erreur de conception et reconstruire une base mal faite lorsque l'application est opérationnelle, c'est pas un cadeau.
Dans le cas présent, articles de bases et réponses correspondantes peuvent très bien être dans la même table. Par contre l'auteur ne devrait pas y être autrement que sous la forme d'une clé étrangère : l'auteur d'un texte, article ou réponse n'est pas un élément du texte. Il conviendrait donc d'avoir un bloc à part pour les auteurs. Pour ce qui concerne les textes, tu auras forcément une clé primaire, mais également deux clé étrangères : la première clé étrangère, ce sera l'identifiant de l'auteur et avec une jointure, tu pourras récupérer son nom. La seconde est l'identifiant de l'article parent si on a affaire à une réponse et tu regrouperas les textes ensemble avec une auto-jointure ou si tu préfères une jointure de la table avec elle-même ce qui revient à utiliser deux tables virtuelles pour distinguer les deux cotés de la jointure.
ça va donner à peu près le croquis suivant :
Code : Tout sélectionner
+--------------------+ +----------------------+
| articles | | auteur |
+---------------+----+ +-----------------+----+
| art_id | PK | | aut_id | PK |
| aut_id | FK |--------| aut_nom | |
| art_parent_id | FK | | aut_prenom | |
| art_date | | +-----------------+----+
| art_texte | |
+---------------+----+
Pour mémoire : on ne crée pas des tables au petit bonheur lorsqu'on développe. Une base, ça se construit de façon logique et cohérente. On appelle ça la modélisation.
La premiere chose a faire, c'est de recenser les donnees que tu as besoin de manipuler. Ensuite, tu les tries et tu les regroupes par ensembles qu'on nomme des entités. Et à ce stade, on a pas encore créé la moindre table et la base n'existe pas. Je te recommande l'usage du papier/crayon pour faire ça. Une base mal conçue, ce sont des problèmes à venir en cas d'erreur de conception et reconstruire une base mal faite lorsque l'application est opérationnelle, c'est pas un cadeau.
Dans le cas présent, articles de bases et réponses correspondantes peuvent très bien être dans la même table. Par contre l'auteur ne devrait pas y être autrement que sous la forme d'une clé étrangère : l'auteur d'un texte, article ou réponse n'est pas un élément du texte. Il conviendrait donc d'avoir un bloc à part pour les auteurs. Pour ce qui concerne les textes, tu auras forcément une clé primaire, mais également deux clé étrangères : la première clé étrangère, ce sera l'identifiant de l'auteur et avec une jointure, tu pourras récupérer son nom. La seconde est l'identifiant de l'article parent si on a affaire à une réponse et tu regrouperas les textes ensemble avec une auto-jointure ou si tu préfères une jointure de la table avec elle-même ce qui revient à utiliser deux tables virtuelles pour distinguer les deux cotés de la jointure.
ça va donner à peu près le croquis suivant :
[code]+--------------------+ +----------------------+
| articles | | auteur |
+---------------+----+ +-----------------+----+
| art_id | PK | | aut_id | PK |
| aut_id | FK |--------| aut_nom | |
| art_parent_id | FK | | aut_prenom | |
| art_date | | +-----------------+----+
| art_texte | |
+---------------+----+[/code]