Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Schema : Segmentation des données !

1 réponse
Avatar
Etienne Sobole
Salut.

J'ai une base de donn=E9e de produit.
aujourd'hui je dois ajouter des attributs qui permettent de segmenter ces p=
roduits.

Le probl=E8me est qu'en fonction des produits, les attribut ne vont pas =EA=
tre les m=EAmes.
Par exemple (en simplifiant):
Pour une cartouche d'encre je vais avoir la capacit=E9, la couleur et le vo=
lume
Pour un CD, je vais avoir la capacit=E9, la vitesse de lecture, et le mode =
(+R -R, ...)

Donc, j'ai plusieurs options !
1 - ajoute a ma table produit les colonnes capacit=E9, couleur, volume, vit=
esse et mode. C'est simple, mais je vais avoir des tas de colonnes qui ne s=
ervent a rien pour certains type de produit

2 - je cr=E9er une table attribut contenant une entr=E9e pour chaque attrib=
ut. Ca donne une truc genre

CREATE TABLE "product_attribut" (
"idproduct" integer,
"attribut" text,
"value" text,
PRIMARY key (idproduit, attribut),
FOREIGN key (idproduct) REFERENCES product (idproduct)
);

Pourquoi pas !!!
Je suis pas fan, ca risque de mouler un peu lors des jointures !!!

3 - j'utilise l'h=E9ritage
Je cr=E9e alors une table
product_cd pour les CD
product_je pour les cartouche jet d'encre
Le probleme est alors d'arriver a transformer un enregistrement de type pro=
duc en product_cd. Je pense meme que c'est carr=E9ment pas possible.

Bref.
Pour quelle solution faut-il que j'opte ?

Une id=E9e ?
Un retour d'exp=E9rience ?

Merci,
Etienne.

1 réponse

Avatar
SQLpro
Salut

Le 11/03/2013 12:00, Etienne Sobole a écrit :
Salut.

J'ai une base de donnée de produit.
aujourd'hui je dois ajouter des attributs qui permettent de segmenter


ces produits.

Le problème est qu'en fonction des produits, les attribut ne vont pas


être les mêmes.
Par exemple (en simplifiant):
Pour une cartouche d'encre je vais avoir la capacité, la couleur et


le volume
Pour un CD, je vais avoir la capacité, la vitesse de lecture, et le


mode (+R -R, ...)

Donc, j'ai plusieurs options !
1 - ajoute a ma table produit les colonnes capacité, couleur, volume,


vitesse et mode. C'est simple, mais je vais avoir des tas de colonnes
qui ne servent a rien pour certains type de produit



MAUVAIS : par principe pas de NULL !

2 - je créer une table attribut contenant une entrée pour chaque


attribut. Ca donne une truc genre

CREATE TABLE "product_attribut" (
"idproduct" integer,
"attribut" text,
"value" text,
PRIMARY key (idproduit, attribut),
FOREIGN key (idproduct) REFERENCES product (idproduct)
);

Pourquoi pas !!!
Je suis pas fan, ca risque de mouler un peu lors des jointures !!!



C'est bien si très peu d'interrogations...


3 - j'utilise l'héritage
Je crée alors une table
product_cd pour les CD



oui, largement préférable

product_je pour les cartouche jet d'encre



non,
- product_encre
-- product_encre_solide (toner)
-- product_encre_liquide
etc...

héritage à plusieurs niveaux...

Le probleme est alors d'arriver a transformer un enregistrement de


type produc en product_cd. Je pense meme que c'est carrément pas possible.

Il suffit d'utiliser des déclencheur INTEAD OF et des vues.

Lisez les articles que j'ai écrit à ce sujet...
http://sqlpro.developpez.com/cours/modelisation/heritage/
http://blog.developpez.com/sqlpro/p9259/ms-sql-server/exemple_d_utilisation_du_mapping_ro_dire





Bref.
Pour quelle solution faut-il que j'opte ?

Une idée ?
Un retour d'expérience ?

Merci,
Etienne.





--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************