MySQL Forums
Forum List  »  French

Re: aide sur requete avec jointures
Posted by: Jean Molliné
Date: August 22, 2010 04:07AM

Quote
seb seb
Une brique peut très bien se retrouver 2 fois dans une même séquence (à un rank différent).
Une brique peut très bien se retrouver dans deux séquences différentes.
Salut, je reviens sur le sujet parce que je viens de réaliser (j'ai mis le temps...) que j'avais omis la seconde de ces deux règles. Et avec cette règle, la relation est donc effectivement n/n et non pas 1/n comme je l'avais compris. Et donc en fin de compte ton premier modèle a plus de sens. Le seul point à modifier dans ce cas est que ta table relationnelle x_has_y n'a pas besoin d'une colonne id : la clé primaire sera composite avec x_id, y_id et rank_y.

Le Modèle devient alors ceci :
Un détail, sur cette image, tu noteras que j'ai utilisé une manière particulière de nommer les tables.
Chaque nom de table est composé :
- d'un préfixe, t pour Table ou r pour table-relationnelle;
- d'un nom (normal et explicite);
- d'un suffixe en trigramme;
Les colonnes ont toutes un préfixe par rapport à leur table de rattachement. Je me sers également des suffixes de tables pour créer le nom des tables relationnelles, ça fait des noms plus courts.

Cette manière de faire présente en outre l'avantage qu'une colonne ne change pas de nom lorsqu'elle est en clé étrangère dans une autre table, ce qui permet de raccourcir la syntaxe des requêtes de jointure : on peut faire du NATURAL JOIN sans devoir préciser les conditions de jointures, MySQL va les trouver automatiquement.

Si une brique n'est rattachée à aucune séquence, la ligne correspondante dans la table relationnelle peut alors tout simplement sauter. Une brique peut être rattacher autant de fois que nécessaire à un même chapitre à la condition impérative toutefois d'avoir une valeur de rank différent, et dans l'autre sens un chapitre peut avoir autant de briques que voulu.

Quant à la requête, elle deviendra alors :
SELECT 
  m.mod_nom,
  c.cha_nom,
  s.seq_nom,
  b.bri_nom
FROM t_modules_mod m
  NATURAL JOIN r_mod_has_cha_rmc rc
  NATURAL JOIN t_chapitres_cha   c
  NATURAL JOIN r_cha_has_seq_rcs rs
  NATURAL JOIN t_sequences_seq   s
  NATURAL JOIN r_seq_has_bri_rcb rb
  NATURAL JOIN t_briques_bri     b
ORDER BY rc.rmc_rank, rs.rcs_rank, rb.rcb_rank
WHERE m.mod_id = 1;

Voilà, désolé pour mon manque de sens de l'observation sur les précédentes réponses.

______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)

Options: ReplyQuote


Subject
Views
Written By
Posted
5261
August 17, 2010 07:45AM
2872
August 17, 2010 09:25AM
2222
August 17, 2010 09:46AM
2382
August 17, 2010 10:21AM
2098
August 17, 2010 10:32AM
2200
August 17, 2010 11:31AM
2356
August 17, 2010 01:12PM
3535
August 17, 2010 06:28PM
2389
August 17, 2010 10:39PM
2171
August 18, 2010 06:13AM
2275
August 18, 2010 06:59AM
2086
August 18, 2010 10:12AM
2208
August 18, 2010 10:40AM
Re: aide sur requete avec jointures
3492
August 22, 2010 04:07AM
2082
August 31, 2010 03:28AM
2489
August 31, 2010 03:29AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.