j'ai fait pas mal de travaux sur les méta modèles... A lire : http://sqlpro.developpez.com/cours/m...n/metadonnees/
Mais à ce jour le plus performants sur MS reste XML !
En effet, vous pouvez facilement l'indexer.
Il suffit donc de créer des trios caractéristiques/type/valeurs, par exemple de la façon suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 -- table des produits à vendre : CREATE TABLE T_PRODUIT_PRD (PRD_ID INT IDENTITY PRIMARY KEY, PRD_REFERENCE CHAR(16) NOT NULL, PRD_MARQUE CHAR(32), CONSTRAINT UK_PRD_REFMRQ UNIQUE(PRD_REFERENCE, PRD_MARQUE), PRD_PRIX DECIMAL(16,2), PRD_CARACTERISTIQUE XML);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 -- exemple d'insertion INSERT INTO T_PRODUIT_PRD VALUES ('titi', 'ibm', 123.45, '<caracteristiques> <une_caracteristique> <nom>couleur</nom> <type>string</type> <valeur>rouge</valeur> </une_caracteristique> <une_caracteristique> <nom>poids</nom> <type>decimal</type> <valeur>32.6</valeur> </une_caracteristique> <une_caracteristique> <nom>date péremption</nom> <type>date</type> <valeur>2014-12-31</valeur> </une_caracteristique> </caracteristiques>');
Bien entendu vous pouvez caster différemment les valeurs des caractéristiques si des recherches sont a effectuer dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 -- requête de tabularisation du XML : SELECT PRD_ID, PRD_REFERENCE, PRD_MARQUE, PRD_PRIX, carac.value('nom[1]' ,'varchar(64)') AS CARAC_NOM, carac.value('type[1]' ,'varchar(64)') AS CARAC_TYPE, carac.value('valeur[1]' ,'varchar(64)') AS CARAC_VALEUR FROM T_PRODUIT_PRD CROSS APPLY PRD_CARACTERISTIQUE.nodes('/caracteristiques/une_caracteristique') AS Txml(carac)
Le mieux étant de créer autant de vues que nécessaire !
A +
Partager