Je veux avoir des champs dynamiques dans mes dossiers de base de données. P>
Par exemple: Je veux construire une application pour les utilisateurs de créer leurs propres formes p>.
Un utilisateur peut créer les formes suivantes: p>
Profil personnel: p>
Travail: p>
Pays: p>
Comme vous pouvez le voir est une structure très dynamique: p>
Alors je me demande, quelle est la meilleure base de données pour cette: bases de données relationnelles (MySQL / PostgreSQL) ou non-relationnelle comme MongoDB / CouchDB / ou même cassandra xml comme Xindice p>
Et même si je choisis les bases de données non relationnelles pour cela, serait-il intelligent pour stocker des informations critiques sur la sécurité comme les informations client et de facturation? P>
Je l'ai entendu des gens dire que si vos informations nécessitent l'unicité puis utilisez la base de données relationnelle. « Nous ne voulons pas risquer de facturer nos clients deux fois ». Quels sont les problèmes sur les bases de données non relationnelles signifient-ils réellement? Vous ne pouvez pas stocker des données uniques dans des bases de données non relationnelles? P>
Une autre chose que je pensais: Ne l'enregistrement des données dans les bases de données non relationnelles signifie que je vais avoir des entrées en double p>?
Prenons cet exemple: p>
Catégories: p>
Bureau p>
Bureau p>
Comme vous le voyez il y a des situations pour des entrées identiques. Comment gérer les bases de données non relationnelles ceux-ci? Im tellement habitué à des bases de données relationnelles. P>
Je résume mes questions: p>
3 Réponses :
La base de données à choisir dépend de quoi et comment vous voulez interroger quelque chose de Moreso que ce que vous voulez stocker. Tous les DBS vous permettront de stocker à peu près tout ce que vous voulez. P>
Les SJB sont particulièrement bons à interrogation sur la base du modèle relationnel et de le faire raisonnablement arbitrairement. À travers des filtres ad hoc et des jointures, vous pouvez faire toutes sortes de magies. P>
Les DB NOSQL ont tendance à être moins flexibles sur leurs requêtes, mais font bien dans d'autres tâches (telles que le fonctionnement mieux sur les données "non structurées" par exemple). P>
Compte tenu de ce que vous avez posté ici, je voudrais simplement utiliser une base de données SQL et définir les tables au fur et à mesure que l'utilisateur leur souhaite défini. Configurez les index, configurez les requêtes. Cela ressemble à un vrai pas d'évidence pour moi. SQL DBS gère tous ces «champs définissant des champs à la mouche», car ... c'est ce qu'ils font. Alors utilisez cela. P>
Ah bon? Je ne compterais pas cela comme une force de DBS relationnelle. Les alternatives sont beaucoup mieux pour la gestion des données dynamiques. La seule raison pour laquelle vous voudriez aller avec une DB relationnelle pour quelque chose comme celle-ci est un soutien - il y a beaucoup plus de lecture et de soutien aux bases de données relationnelles que pour les alternatives NOSQL.
"SQL DBS gère tous ces" champs définissant sur la mouche "Stuff Habituellement". Pourriez-vous me montrer le lien vers cette caractéristique de la définition de champs / colonnes à la volée? "Les DB de NosqL ont tendance à être moins flexibles sur leurs requêtes, mais font bien dans d'autres tâches (telles que fonctionnant mieux sur les données" non structurées "par exemple)". N'est-ce pas un exemple de seulement des données non structurées?
Vous pouvez émettre ajouter des relevés de colonne code> en réponse aux actions des utilisateurs pour "définir des champs à la volée", mais ce n'est pas une bonne idée. Les implémentations de base de données SQL ne manipulent pas nécessairement des centaines de colonnes.
@joey Adams. Je suis d'accord! Et puis depuis chaque entrée / rangée a ses propres champs / colonnes, je ne devrais vraiment pas ajouter de nouvelles colonnes à une table entière!
@ajsie: En fait, je ne pense pas que ce soit le cas. Ajout de colonnes (dans PostgreSQL, au moins) ne passe pas à travers et engraissez toutes les lignes de la table, alors je doute que de nombreuses colonnes annulées dans une nouvelle ligne prennent de l'espace supplémentaire. Cependant, PostgreSQL a un Colonnes maximales par table de 2500 - 1600 Selon les types de colonnes .
Si vos données conviennent assez bien au modèle relationnel, mais vous devez stocker des données formatées de manière dynamique qui n'est pas énorme, alors vous serez probablement mieux en train de stocker JSON, XML ou similaire dans une colonne. Bien que vous perdiez des avantages de la saisie de SQL de première classe en faisant cela (indexation, vérification de la contrainte de clé étrangère, vérification de type, etc.), il est bon de stocker des documents structurés de manière dynamique lorsque vos requêtes ne se soucient pas beaucoup de leurs internes. < / p>
Si vous êtes intéressé à stocker principalement des données relationnelles avec une touche JSON / XML / etc., je vous recommande de regarder PostgreSQL. PostgreSQL a un type de données XML, mais je ne vous recommande pas de l'utiliser depuis que je déteste XML: p. Personne ne vous empêche de stocker JSON dans un champ de texte, mais PostgreSQL aura bientôt un type de données JSON avec des fonctions de support. HSTORE Le module de contributions offre un moyen efficace de stocker des paires de clé / valeur et fournit également un support d'index de texte complet. P>
Bien que pousse JSON ou similaire dans une colonne de base de données SQL vole face au modèle relationnel, vous êtes habituellement mieux de le faire quand même (quand cela a du sens!). Sinon, vous devez expliquer l'ensemble du schéma de votre application à la base de données, ce qui aboutit à beaucoup de code de cartographie SQL et de base de données qui ne fait vraiment rien. P>
PG N'a-t-il pas bientôt un jeu de données JSON? Je pensais avoir entendu quelque chose à ce sujet dans 9.0 ou 9,1
Stocker le JSON comme champ de texte semble assez inutile d'un point de vue de stockage de données. Ensuite, vous devez sérialiser et désérialiser pour vous assurer que le JSON est valide. Je n'aime pas cette solution. Pour les exigences, il semble que une solution NOSQL comme MongoDB ou Couchdb est beaucoup supérieure.
Je vous recommande vivement de consulter Couchdb pour cela. P>
Soumission: Utilisateur: 5: Formulaire: A3DF2A712 CODE> LI>
ul> li>
ol>
Utilisation de CouchDB Vous pouvez éviter la douleur de créer de manière dynamique des tables uniques pour chaque formulaire qu'un utilisateur pourrait créer. P>
J'ai examiné Mongodb et Couchdb. Ils semblent être une bonne solution pour ce type de structure dynamique. Avez-vous essayé l'ancien aussi?
Mongodb est très différent. Pour ce que vous voulez faire - ce qui implique de servir et de traiter des réponses de formulaire Web - CouchDB semble une bonne ajustement. MongoDB n'a pas de serveur Web intégré et n'est pas capable de manipuler intérieurement des formes. Bien sûr, vous pouvez toujours utiliser MongoDB pour simplement stocker des données JSON. Mais CouchDB vous donne un certain nombre d'outils intégrés que vous devez vous écrire.
Vous voudrez peut-être vérifier comment fonctionne les Couchapps. ( COUCHAPPS.ORG ) Couchapps est un exemple parfait de quelque chose que MongoDB ne peut pas fournir car il est "juste" une base de données .