Nous planifions actuellement la structure de la base de données d'une application web e-commerce assez complexe dont la flexibilité est la pierre angulaire.
Notre application comporte une grande quantité de données (produits) et nous avons rencontré un léger casse-tête en essayant de maintenir des performances élevées sans compromettre les règles de normalisation de la base de données, ou en abandonnant notre concept de flexibilité bien-aimé lors de l'intégration des options de produits (également largement connues sous le nom d'attributs ou de paramètres de produits).
Sur la base de diverses références et sources disponibles, nous avons dressé des listes des avantages et des inconvénients de tous les principaux modèles de base de données bien connus pour résoudre ce problème. Après les avoir comparés, nous avons retenu deux alternatives finales :
-
Modèle EAV (Entity-attribute-value) :
Avantages : La base de données est utilisée pour tous les tris.
Inconvénients : Toutes les requêtes associées incluront un certain nombre de jointures entre plusieurs tables pour compléter la collection de données.
-
Modèle SLOB (LOV sérialisé, aussi connu sous le nom de Facade ?) :
Avantages : Très flexible. Garde le nombre de jointures nécessaires bas par rapport à un modèle de conception EAV. Facile à mettre à jour/ajouter/supprimer des données de chaque produit mais difficile de maintenir l'intégrité des données sans tables supplémentaires.
Inconvénients : Tous les tris seront effectués par l'application au lieu de la base de données. Utilisera beaucoup de performances (mémoire ?) lorsque de grands ensembles de données sont traités par un grand nombre d'utilisateurs.
Nos principales questions :
- Quel modèle/structure utiliseriez-vous, ou peut-être même une solution différente ?
- Y a-t-il de meilleures bases de données que mySQL disponibles actuellement pour accomplir ce que nous voulons ?
Merci beaucoup !