2009-08-13 8 views
0

J'ai une entité de produit qui a plusieurs classes (chaque type de produit a des champs différents avec des milliers de types de produits). Une classe de produit pourrait être un marteau qui aurait des champs de "longueur de poignée", "poids de tête", etc. Une autre pourrait être une chaise avec des champs de "matériau de coussin", "sommier", etc. besoins spécifiques, presque comme des mots-clés pour un catalogue d'images. Ceux-ci finissent par être des champs de recherche, mais nous ne voulons pas utiliser la recherche en texte brut, car les produits auront des formes spécifiques qui répondent à la classe de produit.Comment construire un référentiel Entité ayant un tableau de pièces

Le produit se décompose en trois types de champs de description, image, prix similaires à:

Product.Desc.HandleLength 
Product.Desc.HeadWeight 
Product.Image.FrontFace 
Product.Price.RetailCost 
Product.Price.ManufacturersSalePrice 

Ce que je pouvais simplifions à:

Product.Desc["HandleLength"] 
Product.Desc["HeadWeight"] 
Product.Image["FrontFace"] 
Product.Price["RetailCost"] 
Product.Price["ManufacturersSalePrice"] 

Serait-il préférable de l'entité de référentiel est-elle un objet avec trois tableaux de contenu qui varie? Des idées sur un bon moyen de représenter un objet comme celui-ci? Je considérais même une sorte de "dépôt d'usine" lol.

Répondre

1

Si vos descriptions (ou images) peuvent être partagées entre plusieurs produits, définissez une table distincte pour eux, sinon gardez simplement HandleLength etc. comme champs de la table principale. Si vos propriétés sont fortement dépendantes produit

(autrement dit, il y a au moins dix propriétés qui ne sont pas partagées par tous produits), alors vous devriez envisager la création d'une table de classe:

classId  parent 
[Tool]   [NULL] 
[Screwdriver] [Tool] 

, une classe Table -property

classId  property  
[Screwdriver] Type 
[Screwdriver] Size 

, et une table de valeur

ItemId classId  property value 
1  [Screwdriver] Type  PH 
1  [Screwdriver] Size  2 

Les prix ont tendance à être slowly changing dimensions.

Vous devez choisir l'une des façons de les stocker (type 1, type 2, etc.), en fonction de la fréquence à laquelle ils changent et de vos besoins pour conserver l'historique des prix.

+0

Perception incroyable que vous avez. J'aime comment vous avez construit les classes dans les tables. Maintenant, comment allez-vous architecturer le référentiel pour refléter ces classes? Souhaitez-vous que le référentiel lise les méta-données et assemble l'objet à la volée, comme un motif d'usine (peut-être même un constructeur)? –