Question

Je suis à la recherche d'une solution de base de données pour permettre les champs définis par l'utilisateur et les valeurs (permettant un nombre illimité). À première vue, EAV semblait la bonne, mais après une lecture que je ne suis pas sûr plus.

Quels sont les avantages et les inconvénients de EAV?

Y at-il une méthode de base de données de remplacement pour permettre attributs définis par l'utilisateur / champs et les valeurs?

Était-ce utile?

La solution

Ce ne doit pas être considérée comme une réponse exhaustive, mais seulement quelques points sur le sujet.

Puisque la question est également marqué avec la balise [sql], permettez-moi de dire que, en général, ne sont pas particulièrement appropriés pour stocker des données en utilisant le modèle EAV . Vous pouvez toujours concevoir un modèle EAV dans SQL, mais vous devrez sacrifier de nombreux avantages qu'une base de données relationnelle donnerait. Non seulement vous ne serez pas en mesure de faire respecter l'intégrité référentielle, utiliser des types de données SQL pour les valeurs et appliquer les attributs obligatoires, mais même les requêtes très simples peuvent devenir difficiles à écrire. En fait, pour surmonter cette limitation, plusieurs solutions EAV compter sur la duplication de données, au lieu de se joindre aux tables connexes, qui, comme vous pouvez l'imaginer, a beaucoup d'inconvénients.

Si vous avez vraiment besoin d'un design sans schéma, « permettant un nombre illimité d'attributs », votre meilleur pari est probablement d'utiliser un la solution NoSQL. Même si les faiblesses des EAV par rapport aux bases de données relationnelles sont également applicables aux alternatives NoSQL, il vous sera proposé des fonctionnalités supplémentaires qui sont difficiles à réaliser avec des bases de données SQL conventionnelles. Par exemple, le plus souvent datastores NoSQL peuvent être mis à l'échelle beaucoup plus facile que les bases de données relationnelles, tout simplement parce qu'ils ont été conçus pour résoudre une sorte de problème d'évolutivité, et ils ont laissé tomber intentionnellement des caractéristiques qui rendent difficile l'extension.

De nombreuses plates-formes de cloud computing (tels que ceux offerts par Amazon , Google et Microsoft ) comportez datastores sur le modèle EAV, où un nombre arbitraire d'attributs peut être associé à une entité donnée. Si vous envisagez de déployer votre application sur le nuage, vous pouvez considérer cette fois comme un avantage commercial, ainsi que d'ordre technique, car la forte concurrence entre les grands fournisseurs pousse les ratios valeur-coûts à des niveaux très élevés, en poussant sans cesse sur les caractéristiques et poussant les coûts financiers et la mise en œuvre.

Autres conseils

Jetez un oeil à posgtres hstore http://www.postgresql.org/ docs / 9,0 / statique / hstore.html cela va faire exactement ce que vous voulez sans la plupart des inconvénients

Le Streams plate-forme propose la voie alternative basée sur Streams ( En fait, il est le modèle de domaine ), les champs et missions entités.

  

Y at-il une méthode de base de données de remplacement pour permettre attributs définis par l'utilisateur / champs et les valeurs?

Une alternative consiste à modifier le schéma de base de données en fonction de l'entrée utilisateur:. Par exemple lorsque l'utilisateur souhaite un nouveau champ, puis ajoutez une colonne correspondant à la base de données

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top