Une fois, j'ai utilisé des paires clé-valeur dans une base de données dans le but de créer une feuille de calcul (utilisé pour la saisie des données) dans lequel un caissier serait la synthèse de son activité de travail d'un tiroir-caisse. Chaque k/v de la paire représente une cellule nommée dans lequel l'utilisateur a entré une valeur monétaire. La raison principale de cette approche est que la feuille de calcul a été fortement sujette à changement. De nouveaux produits et services ont été ajoutés régulièrement (donc de nouvelles cellules apparaissent). Aussi, certaines cellules n'étaient pas nécessaires dans certaines situations et pourrait être supprimé.
L'application que j'ai écrit était une réécriture d'une application qui ne pause le narrateur feuille dans des sections séparées chacune représentée dans une autre table. Le problème ici est que, puisque les produits et services ont été ajoutés, schéma de modifications ont été nécessaires à. Comme avec tous les choix de conception il y a des avantages et des inconvénients à prendre une certaine direction par rapport à l'autre. Mon refonte certainement effectué plus lent et plus rapidement consommé de l'espace disque; cependant, il était très agile et a permis pour de nouveaux produits et services à ajouter en quelques minutes. Le seul problème à noter, cependant, a été disque de consommation; il n'y avait pas d'autres maux de tête que je me rappelle.
Comme déjà mentionné, la raison pour laquelle je considère habituellement comme une paire clé-valeur approche est lorsque les utilisateurs-ce qui pourrait être un propriétaire de l'entreprise-veulent créer leurs propres types ayant un spécifique à l'utilisateur un ensemble d'attributs. Dans de telles situations, je suis venu à la suite de la détermination.
Si il n'y a pas besoin de récupérer des données par ces attributs ou de la recherche peut être reporté à l'application une fois qu'un bloc de données a été récupérée, je vous recommandons de conserver tous les attributs d'un champ de texte (à l'aide de JSON, YAML, XML, etc.). Si il y a un fort besoin de récupérer des données par ces attributs, il devient malpropre.
Vous pouvez créer un "attributs" de la table (id, item_id, clé, valeur, data_type, sort_value) où la colonne de tri convertit la valeur réelle dans une chaîne-triables représentation. (par exemple, la date: "2010-12-25 12:00:00", numéro de: "0000000001"), Ou vous pouvez créer des tables d'attributs par type de données (par exemple, string_attributes, date_attributes, number_attributes). Parmi les nombreux avantages et les inconvénients de ces deux approches: la première est la plus simple, la seconde est plus rapide. Les deux vont vous amener à écrire des laids, des requêtes complexes.