Bonjour,

J'aimerai avoir votre avis sur le choix de modélisation d'une base de donnée.

Je travaille en ce moment sur un site de vente en ligne. Le site permet l'achat de 4 type de produits.

Parmi ces 4 types de produits, 2 sont en format numérique, c'est à dire téléchargeable en ligne, et les 2 autres sont de types physiques (avec une gestion de stock).

Environnement technique:
  • Java/JEE
  • JPA / Hibernate
  • Spring


1 ère solution:

Modéliser les 4 types de produits par 3 tables : Product <-> ProductAttribute <-> ProductAttributeValue

Une liaison de la table Product avec une table TypeProduct permettra de distinguer le type de produit

Cette modélisation permet d'englober énormément de caractéristiques pour les produits.

  1. Les produits ne sont pas simplistes au point d'être représenté par un ensemble de caractéristiques et de valeurs de caractéristiques
  2. La récupération des éléments via JPA peut être complexe


2 ème solution:

Modéliser les 4 types de produits dans des tables séparés et les faire hériter par une table Product.

  • La relation d'héritage n'est pas naturelle avec les SGBD, on mettra en place des foreign keys pour assurer les relations d'héritages.
  • JPA 2 permet de modéliser l'héritage avec une notion de discriminateur, lie une table parent à des tables filles par une colonne discriminateur
  • Simplification du schéma : Les tables qui vont permettre l'achat du produit par un client vont référencer une seule table Product via une table de jointure
  • Simplification du schéma : Les tables qui vont permettre la gestion des stock vont référencer une seule table Product via une table de jointure


3 ème solution:

Modéliser les 4 type de produits dans des tables séparés, sans héritage avec une table commune Product.

  • Pas de notion d'héritage au niveau du SGBD.
  • Multiplication des tables : Les tables qui vont permettre l'achat du produit par un client vont référencer directement les tables concernés en passant par 4 tables de jointures.
  • Multiplication des tables : Les tables qui vont permettre la gestion des stock vont référencer directement les tables concernés en passant par 4 tables de jointures.


Pouvez-vous me donner vos avis et vos conseils ?

Merci par avance