2009-09-08 4 views
1

Je travaille sur une conception de base de données pour une application web de commerce électronique. Pour cette question je simplifie la conception et montre seulement les parties qui sont pertinentes à ma question. Mes points d'intérêt (entités) dans ce scénario sont Products, Upgrades et Orders.Comment ajouter l'entité "Mises à jour" à la conception d'une base de données de produits?

Le Products et Orders sont liés d'une façon typique pour ce type de conception de base de données, avec une table OrderItems pour créer les nombreux à-plusieurs:

Products 
-------- 
ProductID (pk) 
Name 
Description 
Price 

Orders 
------ 
OrderID (pk) 
DateOrderPlaced 

OrderItems 
---------- 
OrderID (fk, cpk) 
ProductID (fk, cpk) 
Quantity 

Maintenant, je me demande comment ajouter Upgrades dans le mélange:

  • un Upgrade peut être valable pour un ou plusieurs Products
  • un OrderItem peut impliquer zéro ou plus valide Upgrades

Par exemple, dire que j'ai ces enregistrements OrderItems qui composent la commande n ° 1:

OrderID ProductID 
------- --------- 
1   1 
1   2 
1   3 

Et je veux appliquer la mise à niveau n ° 1 au produit n ° 1 et # 2 ...

Je peux imaginer d'ajouter une table Upgrades et une table OrderItemUpgrades, ce qui me permettra d'appliquer un certain nombre de Upgrades à un OrderItem donné (ligne dans un Order).

Upgrades 
-------- 
UpgradeID (pk) 
Name 
Description 
Price 

OrderItemUpgrades 
----------------- 
OrderID (fk, cpk) 
ProductID (fk, cpk) 
UpgradeID (fk, cpk) 

je pense à ce que la modélisation de la « application » d'un Upgrade à un Product dans un Order.

Ma question est, où puis-je modéliser la "validité" d'un Upgrade donné pour un Product donné? Dois-je ajouter un tableau ValidProductUpgrades qui concerne les mises à niveau et les produits (ou une autre solution de couche de base de données)? Ou cette logique métier appartient-elle à la couche application?

Répondre

1

Je ferais exactement ce que vous avez montré dans votre bloc de code final ci-dessus. Dans ce cas, il est logique d'ajouter une table distincte qui connectera réellement la mise à niveau à un ordre spécifique tout en gardant le produit à l'esprit. Parce que les mises à niveau peuvent être valides pour un ou plusieurs produits, et dans ce but, il pourrait y avoir plus d'une mise à niveau appliquée à un seul produit; il est également logique d'avoir la table ValidProductUpgrades, qui peut ensuite être interrogée pour s'assurer que les mises à niveau d'un produit sont affichées uniquement si elles peuvent être appliquées au produit en question.

Je pense que votre hypothèse ci-dessus est complète, et est probablement la meilleure façon de gérer cela!

Espérons que cela aide!

+0

Merci Wade, ceci est utile en tant que confirmation par un tiers que j'y vais de la bonne façon! – nselikoff

Questions connexes