Schema : Segmentation des données !

La question :

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

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 !!!

3 - j'utilise l'héritage
Je crée 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 produc en product_cd. Je pense meme que c'est carrément pas possible.

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

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

Merci,
Etienne.

Poser votre question sur le forum Programmation

La réponse :

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 *************************

Poser votre question sur le forum Programmation

Questions similaires :

Quelqu'un at-il suggérer une des fonctions de base de données mySQL de répa

Le mercredi 10 Juin 2015 à 14:33 par colindeloffre : Pour résoudre le problème, passez par le lien ou lisez les instructions au bas de la - Recovery Toolbox for MySQL Apportez votre base de données en mode de récupération Vous devez apporter votre base de données. Arrêt dans le cas où c'est encore...

Requeteur de bases de données

Bonjour Je suis à la recherche d'un outil *simple* permettant d'interroger des bases de données pour des utilisateurs non informaticiens. L'idée est la suivant e : - construire un catalogue de requetes SQL paramétrables - donner acces à ce catalogue aux utilisateurs - leur permettre de les jouer...

synchroniser deux bases de données

j'ai deux bd l'une sur mon portable l'autre sur mon ordi de bureau. assez souvent mon portable est connectable sur le net donc sur mon ordi de bureau, je souhaite procéder à ces moments là, à une synchronisation des deux bd. Les bd sont en PostgreSQL, il peut y avoir eu des insertions et...

MYSQL - Base de données ne se connecte pas

Bonjour, J'essaie d'installer une BD dans un nouveau compte. J'ai ces énoncés: $db = mysql_connect ($strDBServer, $strDBUser, $strDBPass); echo mysql_error($db); Comme paramètres, j'ai ceci : $strDBServer="localhost", ce qui correspond à ce que montre phpmyadmin $strDBUser et $strDBPass sont...

POSTGRESQL: Manager un serveur de base de données

Salut. Bon mon problème du jour n'est pas relatif au SQL mais bel et bien à l'administration PostgreSQL. J'ai une charge assez importante sur mon serveur de base de données. top - 10:01:55 up 70 days, 16:57, 0 users, load average: 16.59, 16.06, 16.06 Tasks: 144 total, 1 running, 143 sleeping,...