Est-ce une bonne modelisation de table?

Mammouth du PHP | 1511 Messages

17 févr. 2006, 15:00

Salut,
pour mon site j'ai créer un table mysql a l'aide du logiciel de fabforce et j'aurais voulu avoir votre avis sur une possible amelioration de la table ou une optimisation...
Voici comment celle-ci est optimisée.
Image
Merci d'avance

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

17 févr. 2006, 15:07

Perso une chose, je met un champ au format TEXT que quand c'est vraiement nécessaire sinon je met des varchars

exemple : user_msn en TEXT je l'aurai mis plutot en varchar quitte à faire un varchar 255, je doute qu'une adresse mail dépasse 255 caractères !
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

Mammouth du PHP | 1511 Messages

18 févr. 2006, 19:28

N'y a t'il pas des champs que je pourrais lier?
@+

Mammouth du PHP | 19672 Messages

19 févr. 2006, 03:46

La liaison entre les tables doit se faire selon la dépendance et ce qu'on nomme les cardinalités. Je vais illustrer avec un exemple qui ne correspond peut-être pas du tout avec ton modèle directement, mais tu peux adapter :

Une table membre et une table news à priori sera liée, chaque new étant publiée par un membre. Mais un membre peut devoir poster plusieurs news, alors qu'à l'inverse, une news n'est publiée que par un et un seul membre.

Dans DBDesigner, tu as sur la gauche des outils pour créer les liens : la liaison que j'illustre est du type 1:n : si tu cliques sur le bouton [Nouvelle relation 1:n non identifiée] puis ensuite successivement sur la table membre puis sur la table news, tu verras alors s'ajouter dans la table news un champ qui sera la clé primaire de la table membre identifiée en clé étrangère, ce qui te permettra par la suite d'effectuer des jointures pour extraire les messages publiés par un membre en particulier.

À partir de ce principe de base, à toi de voir comment établir les relations s'il y a lieu entre certaines tables de ton modèle.

Dernière chose : un petit conseil pratique : lorsque tu nommes des clés primaires id , préfixe ces champs avec une partie du nom de la table, tu t'y retrouveras beaucoup plus facilement par la suite. Ainsi, nomme pour les tables de mon exemple news_id et membre_id : lors de l'ajout de clés étrangères, ce sera beaucoup plus parlant de voir un champ membre_id en clé étrangère dans la table news qu'un simple id qui serait en conflit avec la clé de news si elle se nommait également id tout court.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1511 Messages

20 févr. 2006, 00:41

ok... je vais voir ca
@+

Mammouth du PHP | 1511 Messages

21 févr. 2006, 23:45

Est-ce que cela est mieux comme ca?
Ai-je fait une erreur quelquonque?
Image
Merci d'avance

Mammouth du PHP | 19672 Messages

22 févr. 2006, 00:57

à priori, tu as inversé les cardinalités :-k

On devrait voir la clé primaire de ta table ltcf_members en clé étrangère dans les tables liées et non l'inverse il me semble.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1511 Messages

22 févr. 2006, 01:00

Je dois cliquer sur quelle table en premier?
La table avec les membres ou celle qui va etre liée a la table des membres?
@+

Mammouth du PHP | 19672 Messages

22 févr. 2006, 01:03

dans une cardinalité 1:n, clique d'abord sur la table 1 et ensuite sur la table n : Exemple: un membre peut avoir plusieurs dossiers, mais un dossier ne concerne qu'un et un seul membre : il est donc logique de trouver la clé primaire du membre en clé étrangère dans la table des dossiers: sinon, un même dossier concernera plusieurs membres mais un membre ne pourra avoir qu'un seul dossier.

Pour les types de clés primaire, au lieu de NUMERIC, je te suggère quand même INT en cochant "AI" (auto_increment)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1511 Messages

22 févr. 2006, 01:05

Donc je fais l'inverse de ce que j'ai fait!
C'est ca?
@+

Mammouth du PHP | 1511 Messages

22 févr. 2006, 01:16

Voila ce que j'ai fait, mais dans les parametres des liaisons je suis un peu perdu...
Voila a quoi ressemble ma bdd pour le moment:
Image
Voila ensuite a quoi ressemble les parametres de toutes mes liaisons:
Image
Merci d'avance

Mammouth du PHP | 19672 Messages

22 févr. 2006, 01:20

Tu as des doublons dans les relations avec les tables news et forum_topic: supprimes-en un pour chaque table et ça commencera à avoir beaucoup d'allure. :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1511 Messages

22 févr. 2006, 01:22

Je ne vois pas de quoi tu parles...
Le forum est séparé du systeme de news!
@+

Mammouth du PHP | 1511 Messages

22 févr. 2006, 09:14

J'ai l'impression d'avoir localisé ma gaffe...
Au niveau de chaque liaison, il se trouve que l'on retrouve a chaque fois ltcf_members_member_id et ce deux fois..
Est-ce de cela dont tu parlais?
@+

Mammouth du PHP | 19672 Messages

22 févr. 2006, 18:22

tout juste ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: