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>');

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)
Bien entendu vous pouvez caster différemment les valeurs des caractéristiques si des recherches sont a effectuer dessus.

Le mieux étant de créer autant de vues que nécessaire !

A +