Implémentation d'une jointure "rien=tout"
Bonjour
Veuillez excuser pour le sujet pas trés explicite mais si vous trouvez mieux vous pouvez le proposer. :oops:
Je me pose une question sur l'implémentation d'un modèle de données :
Une rubrique peut être filtrée par plusieurs catégories et bien sur une catégorie peut filtrer plusieurs rubriques.
Code:
1 2 3
| CREATE TABLE rubrique (id_rubrique INT, libelle VARCHAR(255), PRIMARY KEY (id_rubrique));
CREATE TABLE categorie (id_categorie INT, libelle VARCHAR(255), PRIMARY KEY (id_categorie));
CREATE TABLE filtre_rubrique(id_rubrique INT, id_categorie INT); |
Code:
1 2 3 4 5
| INSERT INTO rubrique (1, 'rubrique pour les ouvriers');
INSERT INTO rubrique (2, 'rubrique pour toutes les catégories');
INSERT INTO categorie (1, 'Ouvrier');
INSERT INTO categorie (2, 'Cadre');
INSERT INTO filtre_rubrique (1,1); |
Le problème est que si une rubrique ne possède aucun filtre, c'est comme si elle était filtrée par toutes les catégories. Ainsi la rubrique avec l'id 2 devrait apparaître tout le temps.
Pour réaliser ceux ci nous avons donc décidé que créer la vue suivante :
Code:
1 2 3 4 5
| CREATE VIEW rubrique_avec_filtre AS
SELECT r.*, c.id_categorie
FROM rubrique r
LEFT JOIN filtre_rubrique fr ON r.id_rubrique=fr.id_rubrique
LEFT JOIN categorie c ON !isnull(fr.id_categorie) AND c.id_categorie=fr.id_categorie OR isnull(fr.id_categorie); |
Est ce à votre avis une bonne implémentation du problème ou vaut il mieux créer pour chaque rubrique, un enregistrement pour chaque categorie dans la table filtre ? 8O
Merci d'avance pour vos solutions :roll:
La feuil